有人能用更简单的话说吗?如果很难选择简单的单词,也许有例子?
EDIT还添加了peerDependencies,这是密切相关的,可能会引起混淆。
重要行为差异总结:
dependencies
npm install
package.json
npm install $package
devDependencies
--production
npm install "$package"
--dev
peerDependencies
dependencies需要运行,devDependencies仅用于开发,例如:单元测试、CoffeeScript 到 JavaScript 的转换、缩小、…
如果你要开发一个包,你下载它(例如通过git clone),进入它的根目录,其中包含package.json,然后运行:
git clone
既然你有实际的源代码,很明显你想开发它,所以默认情况下,也安装了dependencies(因为你当然必须运行开发)和devDependency依赖项。
devDependency
但是,如果您只是想要安装软件包以使用它的最终用户,您可以从任何目录执行:
在这种情况下,您通常不需要开发依赖项,因此您只需获取使用包所需的内容:dependencies.
如果你真的想在这种情况下安装开发包,你可以将dev配置选项设置为true,可能在命令行中设置为:
dev
true
npm install "$package" --dev
该选项是false默认的,因为这是一种不太常见的情况。
false
(3.0前测试)
来源:https ://nodejs.org/en/blog/npm/peer-dependencies/
使用常规依赖项,您可以拥有多个版本的依赖项:它只是安装在node_modules依赖项中。
node_modules
例如,如果dependency1两者dependency2都依赖dependency3于不同的版本,项目树将如下所示:
dependency1
dependency2
dependency3
root/node_modules/ | +- dependency1/node_modules/ | | | +- dependency3 v1.0/ | | +- dependency2/node_modules/ | +- dependency3 v2.0/
但是,插件是通常不需要其他包的包,在此上下文中称为主机。反而:
例如,如果dependency1和dependency2peer 依赖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是用户将直接调用的。
Gruntfile
grunt.loadNpmTasks('grunt-contrib-uglify')
如果每个插件都需要不同的 Grunt 版本,这将不起作用。
我认为文档很好地回答了这个问题,也许你对节点/其他包管理器不够熟悉。我可能只是了解它,因为我对 Ruby bundler 有所了解。
关键线是:
这些东西将在从包的根目录执行 npm link 或 npm install 时安装,并且可以像任何其他 npm 配置参数一样进行管理。有关该主题的更多信息,请参阅 npm-config(7)。
然后在 npm-config(7) 下找到dev:
Default: false Type: Boolean Install dev-dependencies along with packages.