有什么区别:
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关键字的真正作用是什么?
当前回答
已经给出了明确的答案。但是值得一提的是devDependencies是如何影响安装包的:
默认情况下,npm install将安装package中列出的所有依赖项。json。使用——production标志(或者当NODE_ENV环境变量被设置为production时),npm将不会安装devDependencies中列出的模块。
参见:https://docs.npmjs.com/cli/install
其他回答
——save-dev用于应用程序开发中使用的模块,而不是在生产环境中运行时需要的模块 ——save用于将其添加到包中。Json,它是运行应用程序所必需的。
例如:express,body-parser,lodash,helmet,mysql所有这些都是在运行应用程序时使用的,而mocha,istanbul,chai,sonarqube-scanner都是在开发过程中使用的,所以把它们放在dev-dependencies中。
NPM link或NPM install也会在你的项目文件夹中安装开发依赖模块和依赖模块
——save-dev将semver规范保存到包描述符文件中的“devDependencies”数组中,——save将其保存到“dependencies”数组中。
as——save是npm的默认选项,所以我使用
npm i package
还有,我用的是
npm i package -D
默认选项将安装包作为项目依赖项,其中as -D为开发依赖项,如测试,lint等,并为开发过程安装包
你可以在这里找到所有的标志https://docs.npmjs.com/cli/v8/commands/npm-install
一般来说,您不希望产品包中充斥着只打算用于开发目的的东西。
使用——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
如果你打开包裹。Json文件,然后你会看到这些条目列出在两个不同的部分:
"dependencies": {
"lodash": "4.x",
"moment": "2.x",
"opentracing": "^0.14.1"
},
"devDependencies": {
"jest": "22.x",
"typescript": "^2.8.3"
},
如果您在自己的项目中尝试过——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用于测试设备等模块。