为什么在npm安装时不想使用“--save”选项?

19

我在这里阅读到使用 --save 选项的相关内容[链接],它说这将把安装的软件包添加到您的package.json文件中。但为什么不是自动的呢?难道您不希望始终如此吗?

我的理解是,node_modules是实际保存软件包代码的目录,而package.json是您已安装的所有软件包的引用/列表。当您将其推送到存储库时,只需推送后者而不是前者,以节省空间。

因此,难道您不希望您的软件包始终位于package.json中,以便每个人都能获得所需内容吗?


3
也许你正在尝试使用一个新的模块,还不确定是否会继续使用它。 - webbm
@Webbm,那么此时你可以轻松卸载它,对吧? - stackjlei
2
很难说为什么npm决定这样做,但备受欢迎的替代品yarn的add命令默认保存依赖项。 - Alexander O'Mara
@stackjlei 是的,那将是一个简单的例子。当然,我不确定在设计过程中实际做出的决定。 - webbm
1
有些地方需要推测,但我要指出的是,有时候您希望保存到开发依赖项而不是依赖项,并且您也不希望为全局安装保存。我知道有解决方法,这只是我的观察。 - Paul
显示剩余4条评论
2个回答

15

使用像 Bowernpm 这样的包管理器,我认为不会自动使用 --save,原因如下:

  1. 并不是所有依赖项都是生产依赖项(请参见 --save-dev)。
  2. 有时您需要测试一个软件包而不更改自己的 package.json
  3. 您可能希望在本地安装一些同事在其计算机上全局安装的软件包。

没有使用 --save 安装的软件包不被视为依赖项,并且保持分离。您可以使用 npm ls 轻松检测它们作为外部软件包,并使用 npm prune 立即删除它们。

现在,如果您认为外部软件包是不好的,您当然可以在每次安装新软件包时使用 --save。出于实际原因,请注意您可以使用 -S 来代替 --save 的简写方式。此外,如果您经常忘记使用该选项,则可以在 shell 中定义别名。

最后,如果您使用 Yarn,请注意,yarn add 命令将每个软件包添加为依赖项。不再需要 --save 标志。


1
如果我第一次安装一个包时没有使用--save选项进行测试,但最终喜欢上了并想将其保留在我的package.json中,我是必须手动输入其名称还是可以只需使用--save选项重新运行npm i? - stackjlei
5
你可以手动修改 package.json 文件(不建议),或者重新执行命令 npm i <pkg> -S - Badacadabra
3
现在默认情况下[npm install]会将依赖保存到package.json文件中,如果你不想让它添加到你的项目package.json文件中,你需要使用--no-save标志。 - Govind Rai

3

引用npm维护人员之一的话:

过去几年间,这里发生了很多变化,使得这个问题的部分内容变得无关紧要: [...] 对于最终用户来说,运行npm config set save true足够容易。 尽管如此,在将--save设为默认值时仍存在一些问题:

  • 在安装过程中必须记住--save--save-dev,这增加了认知负荷,但也迫使您在安装时选择包是dependency还是devDependency
  • 将包从package.json中的一个部分移动到另一个部分仍然比它应该的要困难一些,这样当您忘记指定某些内容为devDependency时,需要清理它们时就会有麻烦。 [...] 因此,我认为将所有人默认保存所有内容并不符合最佳利益。

(来自 https://github.com/npm/npm/issues/5108)


npm install现在默认会保存到package.json文件中。如果您不想将其添加到项目的package.json文件中,您需要使用--no-save标志。 - Govind Rai

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