--dev、--save和--save-dev在npm中有什么区别?

7

我的理解是:

npm install //Installs everything that is listed in package.json
npm install --production //install everything minus dev packages
npm install $package --save //installs and add it to package.json
npm install $package --dev //install and add it to package.json but under dev
npm install --save-dev //??? isn't same thing as --dev flag

也许没有这样的事情。
npm install $package --dev

2
npm 文档 中没有关于 --dev 选项的内容。 - R andom
npm install --production用于排除devDependencies。 - Muhammad Umer
2个回答

6
在许多论坛和文件中有关组件通过npm安装的答案中,经常提到了--save

本地安装(无需--save,它是默认的)

如果您没有使用-g标志进行安装,则默认情况下会得到--save选项(现在为--save-prod-P缩写)。因此以下所有内容都相同:
npm i blabla 
npm install blabla
npm i blabla --save
npm install blabla
npm i blabla --save-prod
npm install blabla -P

这个命令的作用有两个。
  1. 如果缺少或需要升级依赖,它将安装blabla包和所有依赖项。安装位置在项目中的 node modules 文件夹下。
  2. 它将在package.json文件的 dependencies 部分标记此包。因此下次运行 npm installyarn install,将根据此列表安装所有正确的包。
全局包应安装在用户的全局包 node_modules 文件夹中。您安装的全局包未在项目中任何位置列出。请参阅下一节。

全局安装 (-g - 不写入package.json)

以下内容等效于其他内容,但这次它们不会将操作过程写入package.json文件,而是因为它们"位于路径中"而起作用:
npm i -g blabla
npm i blabla -g
npm i blabla --save-global

在上一行中,如果缺少某个软件包或需要升级,则会安装blabla及其所有依赖项,但不会在您的package.json文件中写入任何内容。

开发者/开发安装:

最后是dev选项。以下所有选项都是等效的。

npm i -d blabla
npm i blabla -d
npm install blabla --save-dev
npm install blabla --d

这样做有如下作用:
  1. 它会将blabla及其所有依赖项安装到项目下的一个名为node modules的文件夹中。

  2. 它还会在package.json文件中列出blabla包及blabla所需的任何其他包,但是这次会放在一个名为Dev-Dependencies的特殊部分下。

然后你可以运行npm i(或者yarn i),现在它就可以工作了。如果你正在作为开发者打包,那么一切都像往常一样安装。(不需要在project.json中写任何东西,因为我们只是从文件列表中精确地读取了每一项!!)

但是,如果你要安装到生产环境(这个答案不包括如何进行此操作),那么所有Dev包都不会被安装。它们只在开发阶段使用,比如读取和检查代码错误的Linters。


5

引用自npm install文档:

npm install有3个独占的可选标志,可以在主要的package.json文件中保存或更新包版本:

-S, --save: 包将出现在您的dependencies中。

-D, --save-dev: 包将出现在您的devDependencies中。

-O, --save-optional: 包将出现在您的optionalDependencies中。

因此,似乎没有npm install $package --dev这样的选项。


有没有 npm install --dev 命令? - Muhammad Umer
1
不是。也许你在想yarn?它有一个yarn add --dev选项,可以做同样的事情。 - Matt
@MuhammadUmer,正如Matt所说,npm上不存在这样的选项。 - Max Koretskyi
在更新的版本中(文档链接现在指向该版本),没有--save选项。看起来这个选项已经被--save-prod或-P替代,并且是默认的选项。因此,无论您是否添加--save选项,它都可以正常工作。该软件包将安装到本地项目的node_modules目录中,并在package.json文件的依赖项中列出。如果我理解正确,-g或--global选项不会保存在依赖项中,并且将软件包安装到全局目录中。 - pashute

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接