npm package.json文件中的依赖关系,devDependencies和peerDependencies之间有什么区别?

node.js Node.js

猴子蛋蛋

2020-03-13

该文档很难回答我的问题。我不明白那些解释。有人可以用简单的话说吗?如果很难选择简单的单词,也许还有例子?

EDIT还添加了peerDependencies,这是密切相关的,可能会引起混乱。

第1429篇《npm package.json文件中的依赖关系,devDependencies和peerDependencies之间有什么区别?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

11个回答
JinJin梅 2020.03.13

我找到了一个简单的解释。

简短答案:

依赖关系 “ ...是您的项目真正需要能够在生产环境中工作的依赖关系。”

devDependencies “ ...是您在开发过程中所需要的。”

peerDependencies “如果要创建和发布自己的库,以便可以将其用作依赖项”

这篇文章中的更多详细信息:https : //code-trotter.com/web/dependencies-vs-devdependencies-vs-peerdependencies

LEY村村 2020.03.13

依赖与开发依赖

开发依赖项是仅在开发期间需要的模块,而运行时则需要依赖项。如果要部署应用程序,则必须安装依赖项,否则您的应用程序将无法正常工作。您从使程序能够运行的代码中调用的库可被视为依赖项。

例如反应

开发依赖项模块不需要安装在生产服务器中,因为您不需要在该机器上进行开发。将代码隐藏为javascript的编译器,测试框架和文档生成器可以视为开发依赖项,因为它们仅在开发期间才需要。

例如,ESLint,Babel,Webpack

@FYI,

mod-a
  dev-dependents:
    - mod-b
  dependents:
    - mod-c

mod-d
  dev-dependents:
    - mod-e
  dependents:
    - mod-a

----

npm install mod-d

installed modules:
  - mod-d
  - mod-a
  - mod-c

----

checkout the mod-d code repository

npm install

installed modules:
  - mod-a
  - mod-c
  - mod-e

如果要发布到npm,则对正确的模块使用正确的标志很重要。如果您的npm模块需要该功能,则使用“ --save”标志将模块另存为依赖项。如果这是您的模块不需要运行但需要测试的东西,请使用“ --save-dev”标志。

# For dependent modules
npm install dependent-module --save

# For dev-dependent modules
npm install development-module --save-dev
神无 2020.03.13

尝试分发npm软件包时,应避免使用dependencies相反,您需要考虑将其添加到中peerDependencies或从中删除dependencies

米亚凯 2020.03.13

我想对这些依赖关系的解释加我的看法

  • dependencies 用于代码库中的直接使用,通常在生产代码或代码块中结束的事情
  • devDependencies 用于构建过程,可帮助您管理最终代码的最终生成方式的工具,第三方测试模块(例如webpack的东西)
宝儿Near 2020.03.13

简而言之

  1. 依赖关系 - npm install <package> --save-prod在生产环境中安装应用程序所需的软件包。

  2. DevDependencies - npm install <package> --save-dev只需要为本地开发和测试安装包

  3. 只需键入即可npm install安装package.json中提到的所有软件包。

因此,如果您在本地计算机上工作,只需键入npm install并继续:)

小胖蛋蛋 2020.03.13

一个使我更清楚的简单解释是:

部署应用程序时,需要安装依赖项中的模块,否则您的应用程序将无法运行。不需要在生产服务器上安装devDependencies中的模块,因为您不在该计算机上进行开发。 链接

飞羽宝儿 2020.03.13

例如,mocha通常是devDependency,因为在生产中测试不是必需的,而express是依赖项。

Green卡卡西 2020.03.13

要将包保存为dev依赖项package.json

npm install "$package" --save-dev

运行时npm install,它将同时安装devDependenciesdependencies为了避免安装devDependencies运行:

npm install --production
Near小哥Green 2020.03.13

有些模块和软件包仅对于开发是必需的,而在生产中则不需要。就像它在文档中说的那样

如果有人计划在其程序中下载和使用您的模块,那么他们可能不希望或不需要下载并构建您使用的外部测试或文档框架。在这种情况下,最好在devDependencies哈希中列出这些其他项。

阳光Itachi村村 2020.03.13

依赖项
项目需要运行的依赖项,例如提供从代码中调用的函数的库。
它们是可传递安装的(如果A依赖于B依赖于C,则在A上进行npm install将安装B和C)。
示例:lodash:您的项目调用了一些lodash函数。

devDependencies
仅在开发或发布期间需要的依赖项,例如将代码带入javascript,测试框架或文档生成器的编译器。
它们不是可临时安装的(如果A依赖于B,而dev依赖于C,则A上的npm install将仅安装B)。
示例:grunt:您的项目使用grunt进行构建。

peerDependencies
项目挂钩或修改到父项目中的依赖关系,通常是某些其他库或工具的插件。只是为了进行检查,请确保父项目(将取决于您的项目)对您挂接到的项目具有依赖性。因此,如果您制作了一个向库B添加功能的插件C,那么制作项目A的某人如果对C有依赖性,就必须对B有依赖性。
除非安装了它们(除非npm <3),否则它们只是检查。
示例:grunt:您的项目为grunt添加了功能,并且只能在使用grunt的项目上使用。

该文档非常好地解释了对等方的依赖性:https : //nodejs.org/en/blog/npm/peer-dependencies/

另外,随着时间的推移,npm文档也得到了改进,现在对不同类型的依赖项有了更好的解释:https : //github.com/npm/cli/blob/latest/doc/files/package.json.md#devdependencies

JimHarry 2020.03.13

如果您不想安装devDependencies,则可以使用 npm install --production

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android