Nodejs的npm为何这么多年还没被取代,尽管它浑身都充满了各种不合理?

发布于 1周前 作者 yuanlaile 来自 nodejs/Nestjs

Nodejs的npm为何这么多年还没被取代,尽管它浑身都充满了各种不合理?

甚至看不到 npm 官方有任何要改进的意思,例如抢包名的依旧在抢包名

我不禁陷入了沉思

是否意味着这届程序员不行(滑稽

48 回复

说明没啥好办法啊


yarn 试试?

#1 解决方法有很多,但 npm 官方并不作为
#2 yarn 看起来是个好东西,不过似乎比较少看到有人用 /提起

所以产生了 yarn。
然后 npm 又学起了 yarn。
可惜已经太晚了,很多人跑去 yarn 了。

npm 占包名是没办法啦,但是没有像域名那样恶意,可是因为多了,有包名也没办法啊,就像你注册一个网站的昵称,被抢了也没办法啦。
所以你会发现现在越来越多的包以 @…/命名了。哎,这也没办法啊。
不过官方有时候确实不作为。

#6 并不是没办法,这个很好解决啊,前面加用户名不就好了。例如 php 的 composer 就是 “ github 用户名 /repo 名” 来作为包名的,完美解决冲突

#7 对啊,所以越来越多人以 /开头啊。
我觉得包名应该允许转移也好一点。

除了抢包名,楼主详细说下其他不合理的地方啊,光是一味地说垃圾是没用的

光瞎 bb 了哪个不合理你列几个出来?

现在好的都用 了,比如新的 babel 就是用 组织 /XXX 作为包名的。 用 github 用户名的话 npm 不一定要发布的 github 上吧。

楼主具体列下哪些不合理呗。
没用过其他包管理工具。列一下学习学习。

已转投 yarn,碰到过 npm 安装依赖包不全,或者新增依赖时删除了其他依赖包,主要是 rn 项目用 npm 出错概率比较大

我感觉还好 目前为止没有碰到什么问题 这种还是靠谱的 别的就算了吧

第一次搞 npm 搞了一下午
结果转 yarn 半小时搞定
yarn 万岁!

npm2 那个目录结构超级 sb
但是 npm3 改成了扁平目录结构
即便是在 windows 下也不太会出现问题了
既然没问题干嘛要换

眼高手低,有意见提 issue 交 pr 去

已经可以加了

充满了 what-the-fuck-is-this-plugin 的模块 2333

随手看下 node_modules 里乱七八糟的依赖,发现好多 is-xxx, in-xxx 的模块,主体代码都不超过 5 行…这事从来没在其他语言里看过

left-pad 了解一下?

因为用 js 的程序员很少接触其他更好的包管理工具, 当没有对比的时候, npm 自然就是完美的

因为 JS 程序员觉得 NPM 是完美的~!

其他的包管理也不是没用过,也没比 npm 好到哪儿去。

Yarn 提起得少?去 Ruby 论坛看看吧,Yarn 都成 Rails 5.1 钦定 JS 包管理工具了。

yarn 路过。
但是好像 yarn add 会重新安装一些包。
反正我的项目就是,迫于无奈,只能改原包中的样式,但是每次 yarn add 后,样式又被恢复了。。。

npm 的 namespace 是付费功能来着

库作者用了什么依赖可不是 npm 的锅…

看成 mmp 了 ,😖

没看明白,说的缺点跟用 yarn 还是 npm 有啥关系

因为楼主还没开始着手写取代它的产品

原包的东西就是不能改,要么项目里覆盖,要么自己 fork,还有就是 postinstall 脚本,不然包管理就没有意义

因为是钦定的

说实话,每次弄 node 的 ci 我都怀疑这东西存在的合理性;目前始终不理解:

为什么一个前端工具动不动就要装 gcc 编译 c++啥的玩意

都是下载外部依赖 node module 目录为啥不能通用,为啥不能 cache (可能是我没找到)

为毛线 node module 轻则百兆,动辄上 G

下载编译过程为啥总要依赖系统工具,譬如 py2 (系统已经有了 py3)

最不理解的一点就是撸了好几年后端代码,用 npm install 的时候我就没见过没有⚠的项目

最蒙蔽的就是我发现这玩意好像都不锁版本号,so 不同时间点用同样的命令… WTF

正因为不锁版本号,所以才没法通用 node_modules 目录

楼主这不典型的喷吗?请先列举一下你觉得不好的地方。

系统有了 py3 还需要下个 py2 的原因心里还不清楚吗 :) 这两货又不通用。当然,blame node-gyp 没有升级到 py3。

进了帖子才发现 ve2x 可以这么酷炫

什么叫当没有对比的时候 npm 是好的,我就没见过更好的

#40 见识少不是你的错, 但是你那拿出来炫耀就不对了


npm 5.x package-lock.json 可以了解下。


没有哪个包管理会允许你直接修改包的内容的。你应该 fork 一份再自己改。然后 webpack 构建的时候指定 alias。

我猜是应该没找到更好的方案? 所以只能先将就了?

最恶心的明明是用来编译的 node-gyp



我知道,但是没办法,包本身没有 自定义的变量文件,只能手动覆盖。

很多啊,yarn,cnmp 还有几个其他的记不起名字。这东西要那么高要求干什么,能给我 install 就行了,,要求高可以去写 java,maven,gradle 之类的功能可全了。

看下来,node-gyp、不能全局共享 node_modules 很大程度上其实和 Node 设计有关,不是那么好兼容的同时做出大的改变的,包名、小模块、版本默认自动升级等更多是整个 JS 社区生态的现状,是和老牌的包管理工具是有区别,各有各的特点吧

Nodejs的npm之所以这么多年还没被取代,尽管存在一些不合理之处,主要归因于以下几个关键因素:

  1. 生态系统丰富: npm是Node.js的默认包管理工具,拥有庞大的第三方库和工具资源。通过npm,开发者可以轻松地安装、共享和分发代码,满足各种开发需求。

  2. 社区活跃: npm拥有一个非常活跃的社区,每天都有大量的包被发布和更新。社区的支持和贡献使得npm能够不断迭代和改进,解决存在的问题。

  3. 功能强大: npm提供了丰富的功能,如依赖管理、版本控制、脚本执行等。这些功能使得开发者能够高效地管理项目,提高开发效率。

  4. 兼容性: npm与Node.js紧密集成,使得在Node.js环境下开发的项目能够方便地利用npm进行管理。这种兼容性确保了npm在Node.js生态系统中的不可替代性。

  5. 替代方案不足: 尽管存在一些npm的替代方案,如cnpm、pnpm等,但它们并没有完全取代npm。这些替代方案在某些方面可能具有优势,但在整体生态系统和功能上仍无法与npm相媲美。

以下是一个简单的npm使用示例,展示了如何安装一个依赖包:

npm install axios

此命令将在项目中安装axios包,并在package.json文件的dependencies部分添加一个条目。

回到顶部