
各位 V 友们,你们在使用包管理工具有什么使用优先级吗?它们的区别是什么?作为一个后端,有时候会做一些前端开发,会纠结这些。虽然是瞎纠结,但还是想听各位 V 友们讲讲。
1 n9yr0EOxcDXFr2Io 238 天前 pnpm ,省硬盘空间 |
2 feeloong 238 天前 node>20 pnpm 低于 20 用 cnpm |
3 bgm004 238 天前 npm ,硬盘就是大 |
4 volantRookie 238 天前 yarn ,不知道为什么,觉得它好用,我不是前端,我是后端 |
5 NoManPlay 238 天前 pnpm/yarn,看版本 |
6 huijiewei 238 天前 pnpm or bun |
7 Laobai 238 天前 习惯用 yarn 了 |
8 FFFFourwood 238 天前 via iPhone npm yarn |
9 imba97 238 天前 pnpm npx 不是包管理,是执行包脚本的 |
10 imba97 238 天前 除了节省空间,pnpm 的 workspace 、patch 管理都挺好用,不用额外安装其他东西 |
11 Torpedo 238 天前 pnpm 速度快很多。缺点就是改 node_modules 里的代码不太方便 |
12 shintendo 238 天前 npx 跟其它的不是一类东西 yarn 对现在的 npm 没有明显优势 cnpm 绝对不要用 npm 和 pnpm 选一个 |
13 DOGOOD 238 天前 用 npm 和 yarn 的遇到幽灵依赖就老实了 |
14 rockddd 238 天前 作为一个后端,我一般都是挨个试试,不行就删掉那个文件夹再换一个跑... |
16 shiloh595 238 天前 |
17 monologue520 238 天前 钟爱 npm 因为比 yarn 和 pnpm 都少了一个字母 |
19 Danswerme 238 天前 pnpm + fnm |
20 wildnode 238 天前 公司项目 pnpm 个人项目 bun |
21 meteor957 238 天前 via Android volta 代替 fnm |
22 Menus 238 天前 pnpm |
23 moefishtang 238 天前 npm 后面想试试 bun |
24 mxT52CRuqR6o5 238 天前 pnpm 更现代,没有幻影依赖,能用 pnpm 就别考虑别的了吧 |
25 weixiangzhe 238 天前 pnpm 或者 npm yarn 我看大家都是 1.22 版本,但是现在已经 4.x 了,对比 npm 10 没啥优势,对 peer-dependences 默认是不处理 yarn 2.0 以上又没有 node_module 大部分人都不会用 |
26 Cbdy 238 天前 pnpm |
27 imNull 238 天前 我是后端,一开始用 npm ,后来用 yarn (感觉出现依赖问题相对 npm 少),现在用 pnpm ,install 非常快 |
28 SoulGem 237 天前 via iPhone yarn |
29 wangtian2020 237 天前 npm 没什么问题,如果你遇到特定的问题就换其他的包管理器,遇不到 npm 就行了 |
30 luckyc 237 天前 npm, 主要是自带直接用, 方便. |
31 g17 237 天前 稳定实用选 pnpm ,拥抱新技术选 bun |
32 Avedge 237 天前 yarn 或者 npm |
33 dandeli0n 237 天前 npm P.S. npm 和 npx 不算同一个吗 |
34 kinghly 237 天前 via Android pnpm |
35 lyxxxh2 237 天前 npm: 我一直用这个,因为是默认,既然是默认,稳定性总比其他好吧。 npm: 以前没代理才用他,有些包还是有网络问题的。后面一直代理,省心省事,速度可能还更快(用的 40 ¥/月的机场)。 pnpm: 只是听说过,似乎是 vue3 之后才有的 yarn: 用过几次,我都不知道他和 npm 区别。 npx: 需要多个 node 版本,才需要用。 |
36 thinkwei2012 237 天前 老项目 npm/yarn 新项目 pnpm 省硬盘 不知道是不是错觉,感觉 yarn 在一些项目里兼容性比较强?反正有几个老项目使用 npm 安装就一堆报错,删掉 node_modules 使用 yarn 安装就可以…… |
37 acthtml 237 天前 都用过,现在只用 npm 。 原因是不折腾、硬盘大、命令用不了几次。 |
38 shaozelin030405 237 天前 npm 、pnpm |
39 sdrpsps 237 天前 pnpm 或 bun |
40 abc1310054026 237 天前 人生苦短,npm 。 |
41 lemonfishTBS 237 天前 porn 和 hub |
42 sakae010 237 天前 fnm+pnpm or bun |
43 um1ng 237 天前 yarn / pnpm ,每个项目会配置对应的 packageManager ,配合开启 corepack 使用 |
44 youyouzi 237 天前 npm 主打就是一个不折腾 |
45 jikun 237 天前 用 pnpm 吧! pnpm 本身还可以管理 nodejs 版本,这样可以舍弃 fnm 了 |
46 linkopeneyes 237 天前 人生苦短,pnpm |
47 chenzw2 237 天前 fnm 比 nvm 好用吗? |
48 lerry 237 天前 bun 一把梭 |
49 montaro2017 237 天前 yarn |
50 9956 237 天前 目前在用 bun 、volta |
51 TimPeake 237 天前 老项目/第三方模版框架 npm ,新项目毫无疑问 pnpm |
52 jspatrick 237 天前 yarn@1, pnpm |
53 ColdBird 237 天前 yarn/pnpm |
54 aprilandjan 237 天前 via iPhone 没有人觉得 pnpm 在键盘位置上的分布感觉敲起来很费力吗 |
55 sn0wdr1am 237 天前 pnpm |
56 bzw875 237 天前 pnpm 虽然省空间,但是 yarn 更好用 |
57 qrobot 237 天前 1. npm - 简单高效, 保持最新版本, 支持 workspace 也能解决一些对等依赖的问题, 前提是要保持 node 最新版本才好用 2. cnpm - 只是为了解决国内代理的问题, 这没必要了把? 3. pnpm - 为了解决 node_modules 占用磁盘的问题, 同样也有 workspace 等等一些功能, 中规中矩 4. yarn - 历史上最好用的包管理工具, 独特的 Plug'n'Play 模式, 并且完全解决 node_modules 所有的缺点. 缺点是不兼容目前大部分的国产框架, 例如 dumi 等等, 并且使用起来复杂, 需要安装额外的工具, 学习成本高 要是我, 可能 yarn 的 Plug'n'Ply 最为第一公民 |
58 gorvey 237 天前 新项目 pnpm 老项目 yarn ,谁用谁知道,跑老项目版本问题能卡你好几天,换成 yarn 一次成功 |
59 auroraccc 237 天前 @aprilandjan 改个别名,官方文档推荐改成 pn |
60 oops2day 237 天前 赞成大多数人说的,低版本/老项目就 yarn ,node 版本比较新就 pnpm 。 如果只选一个,那我推荐 yarn |
61 9ki 237 天前 自己玩 pnpm 公司项目 yarn/npm 这俩基本都会用,vue 偏向 npm ,react 偏向 yarn |
62 qxqsxbd 237 天前 npx 不是包管理器(它是包管理器的管理器),然后 yarn 最习惯,不为别的,敲这四个字母手指在键盘上移动的最少 |
63 skiy 237 天前 bun 呢? |
64 shunia 237 天前 @qrobot #57 不是,你说了这么多缺点,那是怎么得出来它是历史上最好用的包管理工具的结论的? 另外 pnpm 老早就支持 PnP 了,但是目前我还真没见多少人给出这个模式到底解决了什么问题,产生了什么独特的优势,甚至其实就像你说的,它反而还很容易产生新的问题。 再一个我司 10 年前就重度使用 yarn 了,讲真,用了几年后真的不想再用了。yarn 的报错体系非常糟糕,兼容性在彼时也问题多多,出现的一些诡异问题,在社区是很难得到有效支持的,彼时 yarn 的理念导致了很多功能需要你自行处理,社区对此也很无奈。 直到 pnpm 出来之后,我才发现社区也能做出好的包管理器,功能上它愿意往前多走一步,从社区的角度来说他们也没有什么非常苛刻的离奇的理念,来阻止或者说避免去开发某一个功能。和 yarn 比,yarn 已经显得裹脚布了。 再一个 yarn 最大的问题是从 classic 到 v2 的变更,花费了过长的时间,同时还约等于交出了一张白卷。除了 PnP 基本没有交出什么像样的产品特性。 你现在去看 yarn 对 PnP 的介绍,你都没法理解它说的几点优点到底哪里算是优点。甚至介绍文档的最后还要极力劝解你:哎呀我们这个 PnP 真的不复杂,没事的,你试试吧。真的就让人很无语。 |
66 gxvsko 237 天前 yarn pnp 零安装 模式,硬盘不值钱 |
67 zhsama 237 天前 pnpm / bun |
68 shiny PRO bun only |
69 hafuhafu 237 天前 npm pnpm |
71 qrobot 237 天前 @shunia #64 yarn 的 pnp 是一个跨时代意义的变化, 至少 yarn 2 (2020 年 1 月), 之后 pnpm(202 年 9 月) 才加入了 PnP 进行支持. Yarn 解决一个最大的问题就是文件碎片的问题, 过多的 node_modules 包会导致庞大的文件碎片, 操作系统在处理这些文件碎片的时候, 这无疑性能损失是非常巨大的. 我自己做的新框架就是采用 Plug'n'Play 作为第一公民, 解决了我很多问题, 例如常见的 peerDependencies 的问题, resolutions 问题, 我很早就开始使用 npm, 如果不是因为 npm 怠惰, 连基本的 workspace 和 overrides 都没有. 至于我说的 "不兼容目前大部分的国产框架", 这本身不是 Yarn 的错误, 而是其他框架没有进行适配, 人不可能一成不变把? 为了让 Yarn 的 Plug'n'Play 作为第一公民, 我重写 umi, 以及 dumi 还有 father 等构建工具, 将 esmodule 和 Plug'n'Play 作为第一公民我觉得是非常必要的, 前端在发展最终 esmodule 和 pnp 这是必然的结局, 或许几年后 yarn 可能推动 npm 做出改变, 然后 npm 默认就支持 pnp 也没准 参照地址 - https://yarnpkg.com/blog/release/2.0 - https://github.com/pnpm/pnpm/pull/2908 |
72 qrobot 237 天前 @shunia #64 我别的工具使用的少, 目前常用的就是 npm/yarn, 新项目用 yarn, 老项目用 npm. yarn 稳定可靠, 至少不会出现 10 年前的项目, 十年后就跑不起来, 也至少不会经常在内网环境各种依赖下载的问题. 也不会遇到类似于 fakerjs 这种供应链攻击 |
73 mlhiter955 237 天前 不用想那么多,轻度用户就用 npm ,重度用户就用 pnpm |
74 shunia 237 天前 @qrobot #71 首先你把 pnpm 完全过滤掉了,根本没提及,说明你没用过?那么什么所谓把 yarn 当作一等公民的比较就是不公平的。 其次请帮忙解释一下 pnp 究竟是如何解决各种 dependecies 相关的问题的,以及它是如何避免操作系统处理文件碎片的问题的。第一个依赖相关的问题,即便是在解决这类问题最激进的 pnpm 项目里,也没有完全解决相关的所有问题。第二个文件碎片的问题,我不知道是你表达错误还是怎样,我不理解的是文件总数不变的情况下,它怎么解决了这个性能损失的。pnpm 增加了硬链接,肯定增加了额外的性能损耗,但是有数据支撑 PnP 比 pnpm 的硬链接提升了多少性能吗?提升的是什么样的性能?在多大的项目里会产生决定性的变化? 即便 npm 哪一天默认支持 PnP ,那也只是一个特性而已,就好比 pnpm 支持 worksapce 的时候也只是一个特性,没有什么所谓的公民一说,其他更上层的工具链在当时也能做好 workspace 管理,反而是 pnpm 的 workspace 确实做的很好,所以下游的上层工具才纷纷接入和支持此一特性。yarn 的 PnP 呢,我的天老爷,提出来多少年了,哪个项目建议你用 PnP 模式运行了? 最后,yarn 的稳定可靠是依赖于 dependencies 本身不作妖,不是 yarn 的功劳。老项目跑不起来只有一种可能,依赖链断裂,这种情况,yarn 处理不了,npm 、pnpm 也处理不了,不存在 yarn 能做好这件事这么一说。你可能没跑过 10 年前的项目,不好意思我跑过,yarn 也搞不定。你对这个问题的理解我觉得有问题。 请多使用事实来说明问题。比如我就知道 pnpm 是很早就支持了 PnP 的,差那两年有没有可能是因为 PnP 作为一个特性并没有被完善的定义?或者说至少它完全不是像你说的所谓“独特的”特性。 |
75 nicenight 237 天前 pnpm 党+1 ,另外要注意 win 和 linux 环境中运行会有一点差别,比如文件名大小写 |
76 UnluckyNinja 237 天前 via Android monorepo 首选 pnpm ,其他家都还没实现 catalogs 功能吧,等于目前 pnpm 独占,缺点是默认全部重新获取包信息,哪怕前后脚。 bun 是默认离线,快很多,但我一直没找到 bun 怎么启用非扁平 node_modules 结构。此外 bun 不作为包管理器也可以作为运行时使用(不过生产还是不太稳定,1.2.5 遇到了个发布包登陆 npm 无效的 bug ) |
77 SergeGao 237 天前 不用选,用 pnpm 就行了,可以理解为别的几个(除了 npx )都是已经/即将被淘汰的包管理解决方案,ps:npx 和别的几个不是一个维度的东西 |
78 uni 237 天前 全部不用,只用 bun |
79 meteora0tkvo 237 天前 一些老的依赖只能用 yarn ,用 pnpm 多多少少会有点问题 |
80 zhoushuo 237 天前 pnpm |
81 qrobot 237 天前 @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 这样的接口, 是可以可以展开的文件夹 而现在变成了 [email protected] [email protected] 至于性能提高多少, 相信你只要是用过电脑的都知道 copy 一个 1g 的文件, 和 copy 一个一共 1g 的散文件的文件速度. 优化的效率就在这个地方, 因此所以需要添加 `.pnp.cjs` 和 `.pnp.loader.mjs`来解决这个问题, 应该 node 本身不支持. pnpm 只是软连接, 这并没有解决什么问题, 而 yarn 是彻底重构 npm 这是本质区别. yarn 不合适初学者, 因为会有很多问题. 这些初学者的问题都解决了, 那么你将会打开一个新的世界, 至少无论压缩体积,还是删除效率还是安装效率至少加快了百分之八十, 甚至一些对等依赖的问题也直接提示给我了. Yarn 安全可靠速度快, 没有哪个包管理器目前能做到 Yarn 的这些功能. 当然大多数人不会在乎现在的项目是否 10 年能启动起来 参照链接 - https://yarnpkg.com/features/caching |
82 qrobot 237 天前 @shunia #74 为什么把 Yarn 作为第一公民, 因为 Yarn 的 PnP 这一定是未来, 所谓的其他项目不支持,这是改变必须要尽力的过程, 总不能为升级需要变化, 所以一直使用 JDK 8 ? 改变就是好事, 积极拥抱改变才是正道 |
83 qrobot 237 天前 |
84 Lemonadeccc 237 天前 工作没得选用的 yarn ,自己 pnpm |
85 mitoop 237 天前 pnpm 和 bun 优先 bun |
86 fang2hou 237 天前 直接 pnpm 就行,现在兼容性,速度,易用性的集大成选择。 pnpm 用官方的安装方式安装之后,也能直接管理 node 环境,不需要装 volta ,fnm 之类的了。 pnpm 还有一个好处就是大部分教程都有 npm 的命令,终端敲个 p ,然后你就直接复制贴上执行就好,其他包管理你经常还得自己替换命令,累的要死。安装时有脚本执行提示,安全性上也吸收了 deno 的优点。 上个月尝试切换到 bun ,bun 做包管理器可能还行,但很多 node 的 binary 用 bun 执行直接报错,必须要让 bun 去调用 node 执行。兼容性问题还是挺大的,私下用用还行,上生产那还是太远了。 |
87 erguotou521 236 天前 via Android 现在 p 都不喜欢了,都是用 b |
88 gurachin 236 天前 pnpm 当下最先进的包管理器。bun 私下用用得了 |
89 shunia 233 天前 @qrobot #83 感谢你的认真回复。 几个问题: 1. pnpm 是硬链接而不是软链接,性能损失肯定有,但是很小,基本可以忽略那种。 2. 打成 zip 或者任何压缩包以后,我不能理解性能怎么可能变好,难道说压缩包不需要 io 的吗?压缩和解压缩就不消耗性能吗? 3. 你发的 performance 的图表上,如果我眼睛没花,好像都是 pnpm 最快?是最底下的最快吧,别是我理解错了。 |
90 qrobot 233 天前 @shunia 你看下面的说明. performance 图标上 pnpm 是最快的, 但是下面文字里面也有说明 Yarn 在 add 和 remove 命令的时候, 速度比 pnpm 快 Yarn 在新机器上的时候 install 慢于 pnpm , 因为要执行一系列的安全检查 打包成为 zip 只是为了优化系统对零碎的文件的处理效率, 这个为什么性能变好, 就看各个磁盘怎么处理了. 例如 FAT16,FAT32,NTFS,exFAT 等 window 下的磁盘格式肯定效率 zip 比 node_modules 好, 在说了作为一个库, 这样是不是也方便迁移? |
91 qrobot 233 天前 @shunia 你要细看 Yarn 做的事情, 还有 Yarn 的 performance 你就会发现 Yarn 的速度会比 pnpm 快, 看 performance 并不是仅仅只是看结果的. 你想想 Yarn 做了多少事情, 如果你仅仅只是使用类似于 npm 这种 install 的功能, 就没必要用 Yarn 了, 相当于核弹打文字, 如果你需要使用 Yarn 的一些复杂的特性, 例如 zero installs 来保证依赖的可靠性, 这个时候你才会发现 node_module 和 zip 的巨大区别 |
92 hhelloworld 148 天前 @Torpedo 不是有 pnpm patch 吗 |