有什么区别:

npm install [package_name]

and:

npm install [package_name] --save

and:

npm install [package_name] --save-dev

这是什么意思?——save和-dev关键字的真正作用是什么?


当前回答

当你使用npm install <package-name>安装一个npm包时,你将它作为一个依赖项安装。

该包将自动列在包中。Json文件,在依赖项列表下(从NPM 5开始:在你必须手动指定-save之前)。 例:NPM安装lodash 按回车键后检查您的包。json文件。

"dependencies": {
    "lodash": "4.x",  
},

当您添加-D标志或——save-dev时,您正在将其作为开发依赖项安装,这将其添加到devDependencies列表中。

示例:NPM install——save-dev lite-server 按回车键后检查您的包。json文件

"devDependencies": {
    "lite-server": "^2.6.1"
},

开发依赖关系是仅用于开发的包,在生产环境中不需要。例如测试包、webpack或Babel。

当你进入生产环境时,如果你输入npm install并且文件夹中包含一个包。Json文件,它们被安装,因为NPM假设这是一个开发部署。

你需要设置——production标志(npm install——production)来避免安装那些开发依赖项。

其他回答

一个完美的例子是:

$ npm install typescript --save-dev

在这种情况下,你会希望使用Typescript(一种可解析javascript的编码语言)进行开发,但一旦应用被部署,就不再需要Typescript了,因为所有的代码都已转译为javascript。因此,将它包含在已发布的应用程序中毫无意义。事实上,它只会占用空间并增加下载时间。

如果您在自己的项目中尝试过——save和——save-dev,那么它们之间的区别可能不会立即被注意到。这里有几个例子…

假设您正在构建一个应用程序,该应用程序使用moment包来解析和显示日期。你的应用程序是一个调度程序,所以它确实需要这个包来运行,就像:没有它就不能运行。在这种情况下,你会使用

npm install moment --save

这将在package.json中创建一个新值

"dependencies": {
   ...
   "moment": "^2.17.1"
}

在开发时,使用测试套件等工具确实有帮助,可能需要jasmine-core和karma。在这种情况下,你会使用

npm install jasmine-core --save-dev
npm install karma --save-dev

这也会在package.json中创建一个新值

"devDependencies": {
    ...
    "jasmine-core": "^2.5.2",
    "karma": "^1.4.1",
}

您不需要测试套件来运行应用程序的正常状态,所以它是一个——save-dev类型的依赖,仅此而已。你可以看到,如果你不理解到底发生了什么,那就有点难以想象。

直接从NPM docs docs#dependencies中获取

依赖关系 依赖项在映射包名的简单对象中指定 到版本范围。版本范围是一个字符串,包含一个或 更多空格分隔的描述符。依赖关系也可以被识别 使用tarball或git URL。 请不要将测试工具或转译器放在您的依赖项中 对象。参见下面的devDependencies。

即使在文档中,它也会要求你使用——save-dev用于测试设备等模块。

我想补充一些我的想法

我认为当别人使用你的代码而不是你自己使用时,所有的差异都会出现

例如,您编写了一个称为节点请求的HTTP库

在你的图书馆里,

你使用lodash来处理字符串和对象,没有lodash,你的代码就不能运行

如果有人将您的HTTP库作为其代码的一部分使用。你的代码会和他的代码一起编译。

你的代码需要lodash,所以你需要放入依赖来编译


如果你写一个项目,比如monaco-editor,它是一个网络编辑器,

你已经使用webpack捆绑了你所有的代码和你的产品env库,当构建完成时,只有一个monaco-min.js

所以有人不关心是——save还是——save-dependencies,他只需要monaco-min.js

简介:

如果有人想编译你的代码(用作库), 将你的代码使用的lodash放入依赖项中 如果有人想在你的代码中添加更多的特性,他需要单元测试和编译器,把这些放到dev-dependencies中

已经给出了明确的答案。但是值得一提的是devDependencies是如何影响安装包的:

默认情况下,npm install将安装package中列出的所有依赖项。json。使用——production标志(或者当NODE_ENV环境变量被设置为production时),npm将不会安装devDependencies中列出的模块。

参见:https://docs.npmjs.com/cli/install

——save-dev用于保存用于开发目的的包。 例如:单元测试、简化… ——save用于保存 应用程序运行所需的包。