昨晚,我体会了没有 pnpm 的痛(一)

简介: 昨晚,我体会了没有 pnpm 的痛(一)

课题:

  1. 如果没有U盘,window 和 mac 本地计算机之间如何传输大量文件?
  2. 为什么要用 pnpm?硬链接、软链接是什么?

起因


事情是这样的,最近自己的办公设备,从thinkpad 更换到了macbook pro14,因为m1 芯片的强悍性能,工作效率都有了很大提升,甚至每天背着回家都不嫌累了,这不,昨晚照常早早的回到家,做好饭,打开电脑看着电影,突然想起来之前电脑上还有很多项目代码没迁移,gitlab 上的就不说了,直接clone 下就好了,剩下的都是一些历史项目老代码绝版的~,手头有U盘和移动硬盘但是 mac 没有 usb 接口,转接头也在公司,而且这个硬盘还不能直接供mac 访问,还要用额外的软件处理格式。。,嗯想了一下,手头可行的方案大概有这些。


快传网站


之前偶尔用过奶牛快传来传输压缩包文件,当时是因为内网原因某些 npm 包下不下来,所以同事用这个网站传给我的,不过那个太慢来,限制也多,而且这种方案都要把自己文件走一遍他们服务器的,不适合传输隐私文件,不太行。pass


局域网共享


我记得一般公司内网都有局域网共享,来存储访问共享文件夹,而且可操作复制到本地,那么 mac 和window 之间是否支持这种方式呢?一通查找下来发现也是可以的(开心),那么就试一下看看吧。

首先,保证window 和 mac 设备在同一个网络下,最简单就是连接同一个 wifi,找到要共享的文件夹,右击 => 属性 => 共享 => 勾选“共享此文件夹” => 选择共享用户,默认 Everyone => 应用、确认。到这一步,该文件夹就被配置为共享文件夹了,在当前局域网内的其他设备均可以通过此设备的 ip + 用户账号密码来进行访问了。

mac 下打开 Finder(访达), 菜单栏 => 前往 => 连接服务器 => 输入 smb://ip地址 => 连接 => 如果链接成功则需要输入设备账号密码来进行验证,通过后就会在Finder 的侧边栏看到一个新的设备选项了,打开就能看到之前共享的文件夹了,可以像普通文件一样来访问和移动。


1687778123711.png

1687778134703.png


事情到这里我以为可以愉快到复制粘贴了,然而发现项目实在太多,大大小小几十个,最糟心到是很多项目里都有node_modules 文件夹,代码才几M,node_modules 却有 200+M,这些包文件因为没能复用,所以基本上每个项目都单独保存了一份,好吧,现在只能先把 node_modules 删除掉了,然后再移动项目代码,这样就很快了。

本来以为事情已经完美结束了,今天却发现一个意外的问题,用过 M1 的同学可能听说过 ssd swap 这个概念,它是 macos 系统同内存规格下比 window 系统更加流畅的原因之一,当系统应用占用过多,内存不够时 window 会有明显的卡顿,macOS 系统却好很多,因为此时它会将暂时不用的应用缓存从内存中转移到 ssd 中,给内存腾出空间。

这个过程是无感知的所以你会发现明明开启了多个大型应用理论上早就超出了内存大小,可是依然不会有明显的卡顿,就是这个原因,特别是随着 ssd 性能的增强以及M1 芯片架构的改变,这个特性被更好的使用了,一方面这是个好事情,充分利用了ssd 性能以更小的内存换来比以往更好的使用体验,但是事情都是有两面性的,swap 的原理意味着它将带来更大的ssd 读写量,而一般 ssd 是有使用寿命的,也就是它的全盘写入次数是有上限的。

硬盘的寿命一般用 TBW (最大写入量)来表示,1T 规格的 ssd固态通常标称的保修寿命为 600TBW,也许你注意到了这里说的是保修寿命而不是使用寿命,是的反正大家都说实际寿命要远远大于保修寿命,谁知道呢。我就姑且按照 1T 600TBW 来算,我512GB 的硬盘就是 300TBW 的标称写入量,本来这是足够用的了,按照普通人的使用习惯,甚至我作为开发人员办公加日常娱乐全天10小时的使用强度来说用个10年都没问题,这是我根据过去50天来的使用习惯统计而来的,最近一次统计是2月1号,平均每个月3T, 3*12 = 36T/年,将近十年的寿命。

但是昨晚一通操作之后,今天在公司查了一遍发现 swap量在一周内增加了 6T(1T==1024GB),很恐怖哎,实在想不明白,怀疑是昨晚文件操作引起的数据读写激增,可能性还是挺大的,一是我没有对文件进行压缩,所以磁盘要读取文件数量并且串行处理,比单个压缩文件要消耗磁盘;二是node_modules 文件可能有遗漏的没有删除 那里面文件居多树形组织复杂度很高,对文件的索引建立过程肯定也很消耗磁盘。

怀疑归怀疑,但是这6T 的大小也实在是匪夷所思 我的项目虽然多但是 1G 都不到的,swap 能达到 6144G 就很神奇,罢了罢了,暂时没有眉目,先记录下来。


1687778145027.png


pnpm 可以做什么


当时我就在想,如果我的项目都用的 pnpm 来管理的包,node_modules 只完整的保存了一份,当需要批量备份代码的时候就直接压缩个包就行了,不需要再单独删除每个项目缓存的包文件了,省心很多啊。

目录
相关文章
|
编解码 数据安全/隐私保护 iOS开发
uniapp IOS从打包到上架流程(详细简单) 原创
uniapp IOS从打包到上架流程(详细简单) 原创
829 0
|
前端开发 JavaScript
微前端——无界wujie
微前端——无界wujie
896 1
vue3使用vue-clipboard3复制到剪切板
vue3使用vue-clipboard3复制到剪切板
3620 0
|
应用服务中间件 PHP nginx
layui框架实战案例(15):上传提示413 request entity too large宝塔配置的解决方案
layui框架实战案例(15):上传提示413 request entity too large宝塔配置的解决方案
617 0
|
8月前
|
SQL 监控 关系型数据库
MySQL数据恢复:当灾难发生时如何应对
本文全面解析MySQL数据恢复方案,涵盖误操作、硬件故障、崩溃及灾难场景下的恢复技巧,助你构建可靠的数据安全保障体系。
|
10月前
|
运维 关系型数据库 分布式数据库
阿里云与云和恩墨强强联手,正式推出zData X for PolarDB一体机
阿里云与云和恩墨的深入合作迈上新台阶!近日,双方强强联手,通过优势互补,正式联合推出高性能、高安稳、高可用的 zData X for PolarDB 一体机。这一突破性合作不仅加速了国产数据库生态建设,也为各行业客户提供了全新升级路径,助力数字化转型。
|
JSON JavaScript Linux
【MCP教程系列】Node.js+TypeScript搭建NPX MCP服务并自定义部署至阿里云百炼
本文介绍如何将阿里云百炼的工作流封装成MCP服务并部署,随后引入到智能体中使用。主要步骤包括:1) 封装MCP服务;2) 发布到npm官方平台;3) 在阿里云百炼平台创建自定义MCP服务;4) 在智能体中添加自定义MCP服务。通过这些步骤,用户可以轻松将工作流转化为MCP服务,并在智能体中调用。
4209 0
|
7月前
|
XML Java Android开发
P3C-CodeStyle-IDEA-2025
P3C-CodeStyle 是一套Java代码规范配置,设定右边界120字符,强制换行与缩进规则,统一注释、参数、异常等格式,提升代码可读性与团队协作效率。
1130 1
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%