有什么区别:
npm install [package_name]
and:
npm install [package_name] --save
and:
npm install [package_name] --save-dev
这是什么意思?——save和-dev关键字的真正作用是什么?
有什么区别:
npm install [package_name]
and:
npm install [package_name] --save
and:
npm install [package_name] --save-dev
这是什么意思?——save和-dev关键字的真正作用是什么?
当前回答
一个完美的例子是:
$ npm install typescript --save-dev
在这种情况下,你会希望使用Typescript(一种可解析javascript的编码语言)进行开发,但一旦应用被部署,就不再需要Typescript了,因为所有的代码都已转译为javascript。因此,将它包含在已发布的应用程序中毫无意义。事实上,它只会占用空间并增加下载时间。
其他回答
我想补充一些我的想法
我认为当别人使用你的代码而不是你自己使用时,所有的差异都会出现
例如,您编写了一个称为节点请求的HTTP库
在你的图书馆里,
你使用lodash来处理字符串和对象,没有lodash,你的代码就不能运行
如果有人将您的HTTP库作为其代码的一部分使用。你的代码会和他的代码一起编译。
你的代码需要lodash,所以你需要放入依赖来编译
如果你写一个项目,比如monaco-editor,它是一个网络编辑器,
你已经使用webpack捆绑了你所有的代码和你的产品env库,当构建完成时,只有一个monaco-min.js
所以有人不关心是——save还是——save-dependencies,他只需要monaco-min.js
简介:
如果有人想编译你的代码(用作库), 将你的代码使用的lodash放入依赖项中 如果有人想在你的代码中添加更多的特性,他需要单元测试和编译器,把这些放到dev-dependencies中
——save-dev用于保存用于开发目的的包。 例如:单元测试、简化… ——save用于保存 应用程序运行所需的包。
默认情况下,NPM只是在node_modules下安装一个包。当你试图为你的app/模块安装依赖项时,你需要先安装它们,然后将它们添加到package.json的依赖项部分。
——save-dev将第三方包添加到包的开发依赖项中。当有人直接运行npm install来安装你的包时,它不会被安装。通常只有当有人先克隆你的源存储库,然后在其中运行npm install时才会安装它。
——save将第三方包添加到包的依赖项中。当有人运行npm install package时,它将与包一起安装。
开发依赖项是那些只在开发包时需要的依赖项。这可以包括测试运行器、编译器、打包器等。 这两种类型的依赖关系都存储在包的包中。json文件。——save-dev添加到devDependencies
NPM安装文档可以参考这里。
--
请注意——save现在是默认选项,从NPM 5开始。因此,不再显式地需要它。不使用——save命令也可以运行npm install来达到同样的效果。
让我给你们举个例子,
你是一个非常严肃的npm库的开发者,它使用不同的测试库来测试包。 用户下载您的库,并希望在他们的代码中使用它。他们也需要下载您的测试库吗?也许你用笑话来测试,而他们用摩卡。你想让他们也安装笑话吗?只是为了管理你的图书馆?
不。对吧?这就是为什么它们在devDependencies中。
当有人这样做时,npm i yourPackage只会安装运行你的库所需的库。你用来捆绑代码或测试和模拟的其他库将不会被安装,因为你把它们放在了devDependencies中。很简洁,对吧?
那么,为什么开发人员需要公开devdependencies呢?
Let's say your package is an open-source package and 100s of people are sending pull requests to your package. Then how they will test the package? They will git clone your repo and when they would do an npm i the dependencies as well as devDependencies. Because they are not using your package. They are developing the package further, thus, in order to test your package they need to pass the existing test cases as well write new. So, they need to use your devDependencies which contain all the testing/building/mocking libraries that YOU used.
如果您在自己的项目中尝试过——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用于测试设备等模块。