前端包管理工具调研

172 天前
 cxhello

各位 V 友们,你们在使用包管理工具有什么使用优先级吗?它们的区别是什么?作为一个后端,有时候会做一些前端开发,会纠结这些。虽然是瞎纠结,但还是想听各位 V 友们讲讲。

7874 次点击
所在节点    Node.js
92 条回复
qrobot
171 天前
@shunia #71


如果是 Yarn 安装的项目, 则 100 年以后 仍然可以用 Yarn 进启动, 哪怕是互联网已经完全断开, 或者说没有任何第三方 npm 的镜像库, 以及 npm 库 Yarn 一样可以启动, 这样就极大的避免了 100 年以后的项目无法启动的问题

你是没有使用 Yarn 的 Zero-installs 来安装项目, 何谈 10 年后进行启动? Yarn 的 Zero-installs 就是为了解决你所谓的 10 年后无法启动的问题

其次 Yarn 重写 node_modules 加载的方式, 这些不用考虑肯定提升了性能

以前的目录是

- a
- esm
- packages.json
- b
- esm
- packages.json

这样的接口, 是可以可以展开的文件夹

而现在变成了

-a@1.0.0.zip
-b@1.0.0.zip


至于性能提高多少, 相信你只要是用过电脑的都知道 copy 一个 1g 的文件, 和 copy 一个一共 1g 的散文件的文件速度.

优化的效率就在这个地方, 因此所以需要添加 `.pnp.cjs` 和 `.pnp.loader.mjs`来解决这个问题, 应该 node 本身不支持.


pnpm 只是软连接, 这并没有解决什么问题, 而 yarn 是彻底重构 npm 这是本质区别.


yarn 不合适初学者, 因为会有很多问题. 这些初学者的问题都解决了, 那么你将会打开一个新的世界, 至少无论压缩体积,还是删除效率还是安装效率至少加快了百分之八十, 甚至一些对等依赖的问题也直接提示给我了.

Yarn 安全可靠速度快, 没有哪个包管理器目前能做到 Yarn 的这些功能.

当然大多数人不会在乎现在的项目是否 10 年能启动起来

参照链接

- https://yarnpkg.com/features/caching
qrobot
171 天前
@shunia #74 为什么把 Yarn 作为第一公民, 因为 Yarn 的 PnP 这一定是未来, 所谓的其他项目不支持,这是改变必须要尽力的过程, 总不能为升级需要变化, 所以一直使用 JDK 8 ? 改变就是好事, 积极拥抱改变才是正道
qrobot
171 天前
@shunia #74 这个是真实的性能测试结果


https://yarnpkg.com/features/performances
Lemonadeccc
170 天前
工作没得选用的 yarn ,自己 pnpm
mitoop
170 天前
pnpm 和 bun 优先 bun
houshuu
170 天前
直接 pnpm 就行,现在兼容性,速度,易用性的集大成选择。

pnpm 用官方的安装方式安装之后,也能直接管理 node 环境,不需要装 volta ,fnm 之类的了。
pnpm 还有一个好处就是大部分教程都有 npm 的命令,终端敲个 p ,然后你就直接复制贴上执行就好,其他包管理你经常还得自己替换命令,累的要死。安装时有脚本执行提示,安全性上也吸收了 deno 的优点。

上个月尝试切换到 bun ,bun 做包管理器可能还行,但很多 node 的 binary 用 bun 执行直接报错,必须要让 bun 去调用 node 执行。兼容性问题还是挺大的,私下用用还行,上生产那还是太远了。
erguotou521
170 天前
现在 p 都不喜欢了,都是用 b
gurachin
169 天前
pnpm 当下最先进的包管理器。bun 私下用用得了
shunia
167 天前
@qrobot #83 感谢你的认真回复。
几个问题:
1. pnpm 是硬链接而不是软链接,性能损失肯定有,但是很小,基本可以忽略那种。
2. 打成 zip 或者任何压缩包以后,我不能理解性能怎么可能变好,难道说压缩包不需要 io 的吗?压缩和解压缩就不消耗性能吗?
3. 你发的 performance 的图表上,如果我眼睛没花,好像都是 pnpm 最快?是最底下的最快吧,别是我理解错了。
qrobot
167 天前
@shunia 你看下面的说明. performance 图标上 pnpm 是最快的, 但是下面文字里面也有说明


Yarn 在 add 和 remove 命令的时候, 速度比 pnpm 快

Yarn 在新机器上的时候 install 慢于 pnpm , 因为要执行一系列的安全检查

打包成为 zip 只是为了优化系统对零碎的文件的处理效率, 这个为什么性能变好, 就看各个磁盘怎么处理了.

例如 FAT16,FAT32,NTFS,exFAT 等 window 下的磁盘格式肯定效率 zip 比 node_modules 好, 在说了作为一个库, 这样是不是也方便迁移?
qrobot
167 天前
@shunia 你要细看 Yarn 做的事情, 还有 Yarn 的 performance 你就会发现 Yarn 的速度会比 pnpm 快, 看 performance 并不是仅仅只是看结果的. 你想想 Yarn 做了多少事情, 如果你仅仅只是使用类似于 npm 这种 install 的功能, 就没必要用 Yarn 了, 相当于核弹打文字, 如果你需要使用 Yarn 的一些复杂的特性, 例如 zero installs 来保证依赖的可靠性, 这个时候你才会发现 node_module 和 zip 的巨大区别
hhelloworld
82 天前
@Torpedo 不是有 pnpm patch 吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1122911

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX