什么是以下两者的区别:
npm install [package_name]
并且:
npm install [package_name] --save
而且:
npm install [package_name] --save-dev
这是什么意思?--save
和 -dev
关键字的真正效果是什么?
已经提供了明确的答案。但值得一提的是devDependencies
如何影响安装包:
默认情况下,npm install会安装package.json中列出的所有依赖模块。使用 --production 标志(或将NODE_ENV环境变量设置为 production时),npm将不会安装列在devDependencies中的模块。
这里的所有解释都很好,但缺少一件非常重要的事情:如何仅安装生产依赖(不包括开发依赖)。
我们通过使用 --save
或 --save-dev
将 dependencies
与 devDependencies
分离。
要安装所有内容,我们使用:
npm i
为仅安装生产环境的软件包,我们应该使用:
npm i --only=production
通常情况下,您不希望将仅用于开发目的的内容添加到生产包中。
使用--save-dev
(或-D
)选项来分离诸如单元测试框架(jest、jasmine、mocha、chai等)之类的软件包。
您的应用程序需要用于生产的任何其他软件包都应使用--save
(或-S
)进行安装。
npm install --save lodash //prod dependency
npm install -S moment // " "
npm install -S opentracing // " "
npm install -D jest //dev only dependency
npm install --save-dev typescript //dev only dependency
如果您打开package.json
文件,那么您将看到这些条目列在两个不同的部分下:"dependencies": {
"lodash": "4.x",
"moment": "2.x",
"opentracing": "^0.14.1"
},
"devDependencies": {
"jest": "22.x",
"typescript": "^2.8.3"
},
npm install
时,依赖项和 devDependencies 都会被安装,所以似乎没有任何区别? - Kokodoko--save-dev
(只用于开发环境,在生产环境中不使用)
--save
(生产环境依赖项)
--global
或-g
(全局使用,即可以在本地系统任何位置使用)
基本上我们是编写
npm install package_name
但是特别针对测试目的,我们不需要在应用程序正常运行时运行某些包,因此Node引入了解决此问题的好方法。每当我们编写
npm install package_name --save-dev
那时这个包只是为了开发目的而安装的。
我想加入一些我的想法:
我认为所有的差异都会在别人使用你的代码时出现,而不是自己使用。
例如,你写了一个名为node's request
的HTTP库。
在你的库中,你使用lodash来处理字符串和对象,没有lodash,你的代码无法运行。
如果有人将你的HTTP库作为他的代码的一部分使用,你的代码将与他的代码编译在一起。
你的代码需要lodash,所以你需要将它放在dependencies
中进行编译。
如果你写一个像 monaco-editor
这样的项目,它是一个 Web 编辑器,
你使用 webpack 打包了所有的代码和你的 产品环境库
,当构建完成后,只有一个 monaco-min.js
所以有些人不关心 --save
还是 --save-dependencies
,他只需要 monaco-min.js
总结:
如果有人想编译你的代码(作为库使用),将你的代码中使用的 lodash
放入 dependencies
如果有人想给你的代码添加更多功能,他需要 单元测试
和 编译器
,将它们放入 dev-dependencies
由于--save是npm的默认选项,所以我使用它
npm i package
而对于 --save-dev,我使用
npm i package -D
默认选项会将包安装为项目依赖项,而 -D 用于开发依赖项,例如测试、lint 等,并安装用于开发过程的包
您可以在此处找到所有标志 https://docs.npmjs.com/cli/v8/commands/npm-install
npm install --production
命令时,通过--save-dev
选项安装的包将不会被重新安装。这是操作上的区别(有关更多信息,请参见 https://docs.npmjs.com/cli/install)。 - AndrewNODE_ENV
设置为生产模式,那么只需运行npm install
命令,开发依赖包将自动被排除。 - Muhammad Umermoment.js
示例为例:在运行 webpack 时,moment
代码从node_modules
中取出并包含在项目中。在这个意义上,这与运行 webpack 时所需的typescript
没有区别。 - Kokodoko