--save-dev 在 npm install grunt --save-dev 中是什么意思?

310
我刚开始使用Grunt。设置起来相当困难,我正在创建一个package.json文件的阶段。
根据这个教程,它说有三种方法来创建一个package.json文件。
第一种方法是执行npm install grunt --save-dev

第一种方法是通过命令行(终端)导航到项目目录,并使用npm安装grunt:sudo npm install grunt –save-dev。安装完成后,您可以使用grunt-init任务自动生成一个特定于项目的package.json文件。

但是--save-dev是什么意思呢?我试着找了一下,但是没有结果。

我想我成功找到了一些答案。 http://gruntjs.com/getting-started - https://npmjs.org/doc/json.html#devDependencies - Vennsoh
教程链接已损坏。 - SteveC
@SteveC 将教程链接更改为archive.org,并引用相关部分。 - undefined
难怪会有混淆:原始教程使用的是en-dash,而不是双连字符--(即–save-dev,而不是--save-dev)。 - undefined
8个回答

342

--save-dev: 这个包将会出现在你的 devDependencies 中。

根据 npm install 文档

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

换句话说,当您运行 npm install 时,将安装项目的 devDependencies,但不会安装应用程序依赖的任何包的 devDependencies; 此外,将您的应用程序作为依赖项的其他应用程序无需安装您的 devDependencies。这些模块只在开发应用程序时才需要(例如 grunt、mocha 等)。

根据 package.json 文档

编辑:尝试可视化 npm install 的操作:

  • 您的项目
    • 已安装依赖项
      • 已安装依赖项
        • 已安装依赖项
        • 未安装devDependency
      • 未安装devDependency
    • 已安装devDependency
      • 已安装依赖项
      • 未安装devDependency

2
默认情况下,它不会安装开发依赖项,但我如何安装它们呢?使用 npm install --dev 标志吗? - StanleyZheng
6
@stanzheng,我不确定你需要了解什么。如果你在一个项目中运行 npm install,那么该项目的 devDependencies 也会被安装。你不希望安装某个依赖项的 devDependencies。如果你想开发一个 npm 包,你需要 git clone xxx 该项目,并在其中运行 npm install - Andreas Hultgren
5
如果我有一个只包含我的npm包的"devDependencies"的package.json文件,并且我运行"npm install",那么这些"devDependencies"将被安装。因此,“在运行npm install时不会安装应用程序依赖的devDependencies”是不正确的说法。 - core
9
我会尽力理解并翻译以下内容,但请注意我不会添加任何额外的解释或内容:我试着去理解,但是我没有理解。然后我试图理解可视化,但还是没能明白。每个符号点代表什么意思?一个文件夹?那个被划掉的符号代表什么?一个不存在的目录?如果是这样,你怎样列举出所有不存在的东西呢? - Rafael Eyng
10
请确认,如果在您的项目中运行npm install,将会安装package.json文件中所有的devDependencies,但是如果您将项目打包成一个新的npm包并发布,当其他人使用npm install安装您的包时,他们的系统上将不会安装devDependencies。这个理解正确吗?@stanzheng 或者您可以运行npm install --production来安装package.json中所有非dev依赖项。 - Reese
显示剩余5条评论

111

在 package.json 文件中,至少有两种类型的包依赖:

  1. 那些被要求用于 使用 模块的包,列在 "dependencies" 属性下。使用 npm,您可以通过以下方式将这些依赖项添加到 package.json 文件中:

    npm install --save packageName
    
  2. "devDependencies"属性列出了开发您的模块所需的包。这些包对于其他人使用该模块并不是必需的,但如果他们想要帮助开发该模块,这些包就是必需的。您可以使用npm将这些devDependencies添加到您的package.json文件中,方法如下:

  3. npm install --save-dev packageName
    

36

补充Andreas的回答,您可以使用以下命令仅安装依赖项:

npm install --production

14
当您使用参数"--save"时,您的依赖项将进入package.json中的#1。当您使用参数"--save-dev"时,您的依赖项将进入package.json中的#2。
#1. "dependencies": 这些包在生产环境中由应用程序所需。 #2. "devDependencies": 这些包仅用于开发和测试。

2
这是最清晰、最简单易懂的英文解释。 - dbonneville

7
您可以在npm的文档中找到关于npm install <package-name> --savenpm install <package-name> --save-dev的说明,请参见:https://docs.npmjs.com/getting-started/using-a-package.json#the-save-and-save-dev-install-flags package.json文件声明了您正在开发的模块的元数据。这两个命令都会修改package.json文件。使用--save将安装的包(在本例中为grunt)声明为您模块的依赖项;而使用--save-dev则将其声明为您模块开发的依赖项。
请问:安装的包是否需要用于我的模块,还是仅用于开发它?

5

对我来说,第一个答案有点令人困惑,所以为了简洁明了,以下是内容:

npm install <package_name> 默认情况下将任何指定的软件包保存到依赖项中。此外,您可以使用一些附加标志来控制它们的保存位置和方式:

npm install <package_name> --no-save 防止保存到依赖项中。

npm install <package_name> ---save-dev 更新您的软件包中devDependencies。这些仅用于本地测试和开发。

你可以在dcu阅读更多信息。


3

–save

–save参数安装的包是核心依赖项。

–save-dev

–save-dev参数安装的包不是核心依赖项,而是开发依赖项。


2

仅在开发时使用

  • --save-dev 表示在生产环境中省略,仅在开发环境中使用(更小、更快)。

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