This documentation个答案很难回答我的问题.我不明白那些解释.有人能用更简单的话说吗?如果很难 Select 简单的词,可以举一些例子?
EDIT还增加了peerDependencies
,这是密切相关的,可能会引起混淆.
This documentation个答案很难回答我的问题.我不明白那些解释.有人能用更简单的话说吗?如果很难 Select 简单的词,可以举一些例子?
EDIT还增加了peerDependencies
,这是密切相关的,可能会引起混淆.
重要行为差异总结:
dependencies
安装在以下两个设备上:
npm install
来自包含package.json
的目录npm install $package
在任何其他目录上依赖性
个是:
npm install
包含package.json
的目录上,除非通过--production
标志(向上投票Gayan Charith's answer).npm install "$package"
上,除非您给它--dev
选项.对等依赖
:
npm install
上缺少,请给出警告,您必须手动解决依赖关系.运行时,如果缺少依赖项,就会出现一个错误(@nextgentech中提到),这很好地解释了这一点:https://flaviocopes.com/npm-peer-dependencies/及物性(Ben Hutchison中提到):
dependencies
是通过传递方式安装的:如果A需要B,B需要C,那么C就会被安装,否则,B不能工作,A也不会.
依赖性
不是通过过渡方式安装的.例如,我们不需要测试B来测试A,所以B的测试依赖性可以忽略不计.
此处未讨论的相关选项:
bundledDependencies
这是关于以下问题的讨论:100optionalDependencies
(提及by Aidan Feldman)dependencies
个需要运行,依赖性
个只需要开发,例如:单元测试、CoffeeScript到JavaScript的转换、缩小...
如果你要开发一个软件包,你可以下载它(例如通过git clone
),转到包含package.json
的根目录,然后运行:
npm install
由于您有实际的源代码,很明显您想要开发它,因此默认情况下,dependencies
(当然,因为您必须运行才能开发)和devDependency
个依赖项也都已安装.
但是,如果您只是一个最终用户,只想安装一个软件包来使用它,那么您可以从任何目录执行以下操作:
npm install "$package"
在这种情况下,您通常不需要开发依赖项,所以您只需要获得使用包所需的:dependencies
.
如果您真的想在这种情况下安装开发包,可以将dev
配置选项设置为true
,可能是从命令行:
npm install "$package" --dev
默认情况下,选项为false
,因为这是一种不太常见的情况.
(在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/
然而,插件是通常不需要另一个包的包,在本文中称为host.相反:
例如,如果dependency1
和dependency2
对等体依赖于dependency3
,则项目树将如下所示:
root/node_modules/
|
+- dependency1/
|
+- dependency2/
|
+- dependency3 v1.0/
即使你在package.json
文件中从未提及dependency3
,也会发生这种情况.
我认为这是Inversion of Control设计模式的一个例子.
对等依赖的一个典型例子是主机Grunt及其插件.
例如,在像https://github.com/gruntjs/grunt-contrib-uglify这样的Grunt插件上,您将看到:
grunt
是peer-dependency
require('grunt')
个在tests/
以下:程序实际上没有使用它.然后,当用户使用插件时,他会通过添加grunt.loadNpmTasks('grunt-contrib-uglify')
行隐式地从Gruntfile
中获取插件,但用户将直接调用grunt
.
如果每个插件都需要不同的Grunt版本,那么这就行不通了.
我认为文档很好地回答了这个问题,也许您只是对 node /其他包管理器不够熟悉.我可能只理解它,因为我对Ruby bundler了解一点.
关键是:
这些东西将在从包的根目录执行npm链接或npm安装时安装,并且可以像任何其他npm配置参数一样进行管理.有关此主题的更多信息,请参阅npm配置(7).
然后在npm配置(7)下找到dev
:
Default: false
Type: Boolean
Install dev-dependencies along with packages.