为什么npm是用JavaScript编写的?

5
我查看了npm的package.json文件,发现npm实际上只是一个node.js包,有很多依赖项,如lodash。这意味着left-pad包引起的破坏许多npm包的情况可能也会影响npm。
我看到有一些趋势:pip用Python编写,RubyGems用Ruby编写,Composer用PHP编写,Maven用Java编写等等。但是在目标语言中编写软件包管理器是否好呢?

4
为什么不呢? - Sergio Tulentsev
顺便提一下,node 运行时使用 Python 和 C++,因此并不像整个 node 栈只使用 JS 编写。 - Quill
2个回答

4
更具体地说,npm是使用npm编写的 - JavaScript与npm leftpad事件无关。我无法想象他们不使用自己的产品,理由如下:
  1. 这是一个管理软件依赖关系的工具。他们必须使用其中之一。你会建议他们使用别人的吗?当然,如果你信任自己的产品,你会自己使用它。
  2. leftpad“事件”更多的是政策上的失误,而不是软件上的缺陷,显然他们没有预料到或认为这是一个严重的问题,直到发生了严重的事情。因此,这不是不使用npm的理由。
  3. 在托管的数十万个包中,这种情况不可能经常发生,否则早就修复了。这相当令人印象深刻。
  4. 只需更新缓存策略即可轻松解决,因此它不会对npm构成威胁。
  5. 其他软件包管理工具也存在类似或更严重的问题。例如,由于缺乏资金,整个maven存储库已经离线。这不太可能发生在npm上,因为它是集中化的,并且有许多大型利益相关者有兴趣确保它的稳定性。
  6. 这样的事件使生态系统更加稳定和成熟。
  7. 像所有故事一样,这很快就会过去。

“这种情况不太可能发生在npm上。”为什么?因为npm不是去中心化的,服务器也不是免费的。 - fregante
1
正是因为这个原因。npm 是集中化的。太多公司,包括谷歌、微软、苹果在 npm 上有软件,因此如果他们资金不足,只有一个仓库需要救援。而 Maven 是分散化的,任何一个仓库都可能失败并引起混乱。 - chriskelly
有趣的,那很有道理 :) - fregante

3

这是因为npm是JavaScript运行环境Node.js的默认包管理器。

包管理器自然应该用其运行时所使用的语言编写。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接