为什么你不想在npm install中使用`--save`选项?

时间:2017-04-30 00:01:04

标签: javascript node.js npm package.json

我读过有关使用--save选项here的内容,并说它会将已安装的软件包添加到您的package.json文件中。但为什么这不是自动的呢?你不总是想要这个吗?

我的理解是node_modules是实际保存包的代码的目录,而package.json是您已安装的所有包的引用/列表,以便当您将其推送到一个回购,你只推动后者,而不是前者,以节省空间。

然后,当其他人克隆或拆分您的仓库时,他们将package.json引用并安装所有必要的包来处理您的项目。

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

2 个答案:

答案 0 :(得分:13)

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

  1. 并非所有依赖项都是生产依赖项(请参阅--save-dev)。
  2. 有时您需要在不改变package.json的情况下测试包。
  3. 您可能更喜欢在本地安装一些同事在其计算机上全局安装的软件包。
  4. 没有--save安装的软件包不被视为依赖项,而是保持独立。您可以使用npm ls轻松地将其检测为无关的包,并使用npm prune立即删除它们。

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

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

答案 1 :(得分:3)

引用其中一位npm维护者:

  

在过去的几年里,这里发生了很多变化,这使得本期的部分内容没有实际意义:   [...]   它足够简单,可以作为最终用户运行npm config set save true。   也就是说,在--save作为默认值时,仍有许多粗糙的地方:

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

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