--save和--save-dev有什么区别?

之间有什么区别?

npm install [package_name]-保存

npm install [package_name] --save-dev

这是什么意思?

蛋蛋十三2020/03/14 12:48:21

这里的所有解释都很好,但是缺少一个非常重要的事情:如何仅安装生产依赖项?(没有开发依赖性)。我们单独dependenciesdevDependencies使用--save--save-dev要安装所有我们使用:

npm i

要仅安装生产软件包,我们应该使用:

npm i --only=production
神无LEYMandy2020/03/14 12:48:21

人们在生产中使用npm来处理邪恶的事情,Node.js就是一个例子,因此您不希望所有开发工具都在运行。

如果您正在使用gulp(或类似产品)来创建要放在服务器上的构建文件,那么这并不重要。

米亚Near2020/03/14 12:48:21

--save-dev用于在应用程序开发中使用的模块,在生产环境中运行时不需要 -save用于将其添加到package.json中,并且是运行应用程序所必需的。

示例:express,body-parser,lodash,helmet,mysql所有这些都在运行应用程序时使用–保存以放置依赖项,而在开发过程中使用mocha,istanbul,chai,sonarqube-scanner,因此将它们放在dev中-依赖性。

npm link或npm install还将在您的项目文件夹中安装dev-dependency模块以及依赖模块

神无逆天2020/03/14 12:48:21

通常,您不希望使用仅用于开发目的的东西来夸大生产包。

使用--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"
},
LEYJim2020/03/14 12:48:21

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

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

请参阅:https//docs.npmjs.com/cli/install

村村小小十三2020/03/14 12:48:21

--save-dev将semver规范保存到程序包描述符文件中的“ devDependencies”数组中,--save而是将其保存到“ dependencies”中。

小胖神奇2020/03/14 12:48:21

让我给你举个例子,

  • 您是一个非常认真的 npm 的开发人员使用不同的测试库来测试包。
  • 用户下载了您的库,并希望在其代码中使用它。他们还需要下载您的测试库吗?也许您jest用于测试,而他们使用mocha您是否也要安装它们jest只是要运行您的库?

无权利?这就是为什么他们进入devDependencies

当有人这样做时,将仅安装运行npm i yourPackage的库所需的库。您以前用来捆绑代码或进行测试和模拟的其他库将不会安装,因为您将它们放入了很整洁吧?devDependencies

那么,为什么开发人员需要公开devDependancies

假设您的软件包是一个开源软件包,并且有数百人正在向您的软件包发送请求请求。那么他们将如何测试包装?他们将为git clone提供仓库,以及何时npm i进行依赖以及devDependencies
因为他们没有使用您的包裹。他们正在进一步开发软件包,因此,为了测试您的软件包,他们需要通过现有的测试用例以及编写新的测试用例。因此,他们需要使用您的工具devDependencies,其中包含您使用的所有测试/构建/模拟库。

Davaid老丝2020/03/14 12:48:21

一个完美的例子是:

$ npm install typescript --save-dev

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

Tom伽罗2020/03/14 12:48:21

正如@ andreas-hultgren在此答案中建议的,并根据npm docs

如果有人计划在其程序中下载和使用您的模块,那么他们可能不希望或不需要下载并构建您使用的外部测试或文档框架。

但是,对于webapp开发,Yeoman(一种安装了经过同行评审的,预先编写的package.json文件的脚手架工具)将所有程序包都放置在devDependencies中,而没有任何依赖项,因此使用似乎--save-dev是一个安全的选择至少webapp开发中。

阳光Itachi村村2020/03/14 12:48:21

默认情况下,NPM只是在node_modules下安装一个软件包。当您尝试为应用程序/模块安装依赖项时,您需要先安装它们,然后将其添加到的dependencies部分中package.json

--save-dev将第三方程序包添加到程序包的开发依赖项中。当有人安装您的软件包时,将不会安装它。通常只有在有人克隆您的源存储库并npm install在其中运行时才安装它。

--save将第三方程序包添加到程序包的依赖项中。每当有人运行时,它将与软件包一起安装npm install package

开发依赖项是仅开发软件包所需的那些依赖项。这可以包括测试运行程序,编译器,打包程序等。两种类型的依赖关系都存储在包的package.json文件中。--save添加到dependencies--save-dev添加到devDependencies

可以在这里参考npm安装文档。

神奇Mandy2020/03/14 12:48:20

如果您在自己的项目中都尝试过两者之间的差异--save,则--save-dev可能不会立即注意到它们之间的差异所以这是一些例子...

可以说您正在构建一个使用即时包来解析和显示日期的应用程序您的应用是一个调度程序,因此它确实需要运行此程序包,例如:没有它就无法运行在这种情况下,您将使用

npm install moment --save

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

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

在您进行开发时,使用测试套件等工具确实会有所帮助,并且可能需要jasmine-corekarma在这种情况下,您将使用

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

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

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

You do not need the test suite to run the app in its normal state, so it is a --save-dev type dependency, nothing more. You can see how if you do not understand what is really happening, it is a bit hard to imagine.

Taken directly from NPM docs docs#dependencies

Dependencies

Dependencies are specified in a simple object that maps a package name to a version range. The version range is a string which has one or more space-separated descriptors. Dependencies can also be identified with a tarball or git URL.

Please do not put test harnesses or transpilers in your dependencies object. See devDependencies, below.

Even in the docs, it asks you to use --save-dev for modules such as test harnesses.

I hope this helps and is clear.

JinJin米亚2020/03/14 12:48:20
  • --save-dev用于保存软件包以用于开发目的。示例:单元测试,缩小
  • --save 用于保存应用程序运行所需的软件包。