你为什么不想为npm install使用`–save`选项?

我在这里阅读了关于使用--save选项的说明,并且说它会将已安装的软件包添加到你的package.json文件中。 但为什么不是自动的? 你不是总想要这个吗?

我的理解是, node_modules是实际包含你的包的代码的目录, package.json是你安装的所有包的引用/列表,所以当你把它推到一个repo时,而不是前者,以节省空间。

然后,当其他人克隆或分离你的回购,他们将有package.json引用和安装所有必要的软件包来处理你的项目。

因此,你不是总是希望你的包在package.json中,以便每个人都能得到所需的东西吗?

Bowernpm这样的软件包pipe理者,我认为 – 保存并不是自动的,原因如下:

  1. 所有依赖关系不是生产依赖关系(请参阅--save-dev )。
  2. 有时你需要testing一个包而不改变你的package.json
  3. 您可能更愿意在本地安装您的同事在其计算机上全局安装的一些软件包。

--save安装的软件包不被视为依赖项,并保持独立。 您可以使用npm ls轻松地将它们作为无关的包检测,并使用npm prune将它们立即删除。

现在如果你认为多余的软件包是一件坏事,你当然可以使用 – 每次安装一个新软件包时都会保存。 出于实际原因,请注意,您可以使用-S快捷键代替--save 。 而且,如果你经常忘记使用这个选项,你可以在shell中定义一个别名。

最后,如果你使用Yarn ,注意yarn add命令将把每个包添加为一个依赖项。 没有 – 保存标志了。

引用npm维护者之一:

在过去的几年中,这里发生了一些变化,这使得这个问题的一部分没有实际意义:[…]它很容易运行npm config set save true作为最终用户。 也就是说,制作时还是有一些粗糙的地方 – 保存默认值:

  • 虽然在安装时必须记住--save--save-dev的认知负荷是一个恼人的噱头,它确实会迫使您在安装时select一个软件包是dependency还是devDependency
  • package.json部分之间移动包仍然比应该更困难一点,当你忘记指定somethi [ng]是devDependency时,这会使事情变得清晰。 […]我认为这不符合最佳利益,因此,select每个人都默认保存所有内容。

(从https://github.com/npm/npm/issues/5108