栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

重要行为差异摘要:

  • dependencies
    都安装在两个上:

    • npm install
      从包含以下内容的目录中
      package.json
    • npm install $package
      在任何其他目录上
    • devDependencies
      是:

    • 也安装在

      npm install
      包含的目录上
      package.json
      ,除非您通过该
      --production
      标志(继续投票给Gayan Charith’s answer)。

    • 没有安装在
      npm install "$package"
      任何其他目录上,除非您给它
      --dev
      选择。
    • 不能临时安装。
    • peerDependencies

    • 3.0之前的版本:如果缺少,总是安装;如果不同的依赖项使用多个不兼容的依赖项版本,则会引发错误。

    • 预期从3.0开始(未试用):如果缺少
      npm install
      ,则发出警告,您必须手动解决依赖关系。运行时,如果缺少依赖项,则会出现错误(@nextgentech提到)
    • 可传递性(由Ben Hutchison提及)

    • dependencies
      是通过传递安装的:如果A需要B,而B需要C,则C将被安装,否则B无法工作,A也将无法工作。

    • devDependencies
      没有过渡安装。例如,我们不需要测试B就可以测试A,因此可以省去B的测试依赖项。

此处未讨论的相关选项:

  • bundledDependencies
    在以下问题上对此进行了讨论:bundledDependencies相对于NPM中常规依赖项的优势
  • optionalDependencies
    (由艾丹·费尔德曼Aidan Feldman提到)

devDependencies

dependencies
只需要运行就
devDependencies
可以进行开发,例如:单元测试,Coffeescript到Javascript的代码转换,缩小,…

如果要开发软件包,请下载该软件包(例如通过

git clone
),转到包含的根目录
package.json
并运行:

npm install

由于您拥有实际的源代码,因此很显然要开发它,因此默认情况下,

dependencies
(当然,必须运行以进行开发)和
devDependency
依赖项都已安装。

但是,如果您只是希望安装软件包以使用它的最终用户,则可以从任何目录进行操作:

npm install "$package"

在这种情况下,你通常不希望发展的依赖,所以你只能使用包所需要的:

dependencies

如果您确实想在这种情况下安装开发包,则可以将

dev
配置选项设置为
true
,可能从命令行将其设置为:

npm install "$package" --dev

false
默认情况下,此选项是默认情况,因为这种情况不太常见。

peerDependencies

(在3.0之前测试)

资料来源:https :
//nodejs.org/en/blog/npm/peer-
dependencies/

使用常规依赖项,您可以具有多个版本的依赖项:只需将其安装在

node_modules
依赖项中即可。

例如,如果

dependency1
dependency2
都依赖于
dependency3
在不同版本的项目树的样子:

root/node_modules/      |      +- dependency1/node_modules/      |    |      |    +- dependency3 v1.0/      |      |      +- dependency2/node_modules/|+- dependency3 v2.0/

但是,插件是通常不需要其他软件包的软件包,在此上下文中称为 主机 。代替:

  • 主机 需要插件 __
  • 插件提供了主机希望找到的标准接口
  • 用户只能直接调用主机,因此必须有一个单独的版本。

例如,如果

dependency1
dependency2
peer依赖
dependency3
,项目树将如下所示:

root/node_modules/      |      +- dependency1/      |      +- dependency2/      |      +- dependency3 v1.0/

即使您从未

dependency3
package.json
文件中提及,也会发生这种情况。

我认为这是控制反转设计模式的一个实例。

对等依赖关系的一个典型示例是Grunt,主机及其插件。

例如,在https://github.com/gruntjs/grunt-contrib-
uglify之
类的Grunt插件上,您将看到:

  • grunt
    是一个
    peer-dependency
  • 唯一的问题
    require('grunt')
    tests/
    :该程序实际上并未使用它。

然后,当用户使用插件时,他将

Gruntfile
通过添加
grunt.loadNpmTasks('grunt-contrib-uglify')
一行来隐式要求插件来自插件,但这
grunt
是用户将直接调用它。

如果每个插件都需要不同的Grunt版本,则无法使用。

手册

我认为文档很好地回答了这个问题,也许您对节点/其他包管理器还不够熟悉。我可能只了解它,因为我对Ruby捆绑器有所了解。

关键是:

这些东西将在从软件包根目录执行npm link或npm
install时安装,并且可以像任何其他npm配置参数一样进行管理。有关该主题的更多信息,请参见npm-config(7)。

然后在npm-config(7)下找到

dev

Default: falseType: BooleanInstall dev-dependencies along with packages.


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/377503.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号