我读过有关使用--save
选项here的内容,并说它会将已安装的软件包添加到您的package.json
文件中。但为什么这不是自动的呢?你不总是想要这个吗?
我的理解是node_modules
是实际保存包的代码的目录,而package.json
是您已安装的所有包的引用/列表,以便当您将其推送到一个回购,你只推动后者,而不是前者,以节省空间。
然后,当其他人克隆或拆分您的仓库时,他们将package.json
引用并安装所有必要的包来处理您的项目。
因此,您是否总是希望您的包裹在package.json
中,以便每个人都能获得所需的物品?
答案 0 :(得分:13)
对于像 Bower 或 npm 这样的包管理器,我认为--save
不是自动的,原因如下:
--save-dev
)。package.json
的情况下测试包。没有--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之后进行清理。 [...] 因此,我认为选择所有人默认保存所有内容都符合最佳利益。