【问题标题】:Why wouldn't you want to use the `--save` option for npm install?为什么你不想为 npm install 使用 `--save` 选项?
【发布时间】:2017-09-27 20:04:04
【问题描述】:

我阅读了有关使用--save 选项here 的信息,它说它将安装的软件包添加到您的package.json 文件中。但是为什么这不是自动的呢?你不是一直想要这个吗?

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

然后,当其他人克隆或分叉您的存储库时,他们将拥有 package.json 来引用和安装所有必要的包以完成您的项目。

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

【问题讨论】:

  • 也许您正在试验一个新模块,但不知道是否要保留它。
  • @webbm 这样你就可以轻松卸载它了吗?
  • 很难说为什么 npm 决定这样做,但是流行的替代 yarn 的 add 命令默认保存依赖项。
  • @stackjlei 是的,这是一个简单的例子。当然,不确定进入过程设计的实际决定。
  • 呼吁猜测,但我会指出,您有时希望保存到开发依赖项而不是依赖项,并且您不想保存全局安装。我意识到有两种方法可以解决,只是进行观察

标签: javascript node.js npm package.json


【解决方案1】:

对于像 Bowernpm 这样的包管理器,我认为 --save 不是自动的,原因如下:

  1. 并非所有依赖项都是生产依赖项(请参阅--save-dev)。
  2. 有时您需要在不更改 package.json 的情况下测试软件包。
  3. 您可能更愿意在本地安装一些您的同事在其计算机上全局安装的软件包。

没有--save 安装的包不被视为依赖项,它们是分开的。您可以使用npm ls 轻松将它们检测为无关软件包,并使用npm prune 立即删除它们。

现在,如果您认为无关的软件包是一件坏事,那么您当然可以在每次安装新软件包时使用--save。出于实际原因,请注意您可以使用-S 快捷方式而不是--save。此外,如果您经常忘记使用该选项,您可以在 shell 中定义一个别名。

最后,如果您使用 Yarn,请注意yarn add 命令会将每个包添加为依赖项。没有--save 标志了。

【讨论】:

  • 如果我第一次安装一个没有 --save 选项的包来测试它并最终喜欢它并想将它保存在我的 package.json 中,我是否必须手动输入它的名称或者我可以使用 --save 选项重新运行 npm i 吗?
  • 您可以手动修改package.json(不推荐)或重新运行npm i <pkg> -S
  • npm install now saves to package.json by default。如果您不希望将其添加到项目的 package.json 中,则需要使用 to --no-save 标志
【解决方案2】:

引用其中一位 npm 维护者的话:

在过去的几年里,这里发生了很大的变化,这使得这个问题的部分内容没有实际意义: [...] [...] 作为最终用户运行 npm config set save true 很容易。 也就是说,在将--save 设为默认值时仍有一些不便之处:

  • 虽然在安装时必须记住 --save--save-dev 的认知负担是一个令人讨厌的小问题,但它确实会迫使您在安装时选择一个包是 dependency 还是 devDependency。李>
  • package.json 中的部分之间移动包仍然比应有的困难一些,这使得当您忘记指定somethi[ng] 是一个devDependency 时进行清理。 [...] 因此,我认为让每个人都默认保存所有内容并不符合最佳利益。

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

【讨论】:

猜你喜欢
  • 2013-11-03
  • 1970-01-01
  • 2017-06-22
  • 2014-09-04
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
相关资源
最近更新 更多