该文档很难回答我的问题。我不明白那些解释。有人可以用简单的话说吗?如果很难选择简单的单词,也许还有例子?
EDIT 还添加了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之前的版本:如果缺少,总是安装;如果不同的依赖项使用多个不兼容的依赖项版本,则会引发错误。
npm install
,则发出警告,您必须手动解决依赖关系。运行时,如果缺少依赖项,则会出现错误(@nextgentech提到)可传递性(由Ben Hutchison提及)
dependencies
是通过传递安装的:如果A需要B,而B需要C,则C将被安装,否则B无法工作,A也将无法工作。
devDependencies
没有过渡安装。例如,我们不需要测试B就可以测试A,因此可以省去B的测试依赖项。
此处未讨论的相关选项:
bundledDependencies
在以下问题上对此进行了讨论:bundledDependencies相对于NPM中常规依赖项的优势optionalDependencies
(由艾丹·费尔德曼Aidan Feldman提到)dependencies
只需要运行就devDependencies
可以进行开发,例如:单元测试,CoffeeScript到JavaScript的代码转换,缩小,…
如果要开发软件包,请下载该软件包(例如通过git clone
),转到包含的根目录package.html" target="_blank">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/
但是,插件是通常不需要其他软件包的软件包,在此上下文中称为 主机 。代替:
例如,如果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: false
Type: Boolean
Install dev-dependencies along with packages.
我是Android编程新手。我使用Eclipse作为开发的IDE。我已经启动了一个新项目,一些jar文件被自动添加到项目中。你能解释一下这些jar文件的含义吗? Android4.4.2 android.jar < Li > Android-support-V7-app compat . jar < li>android-support-v4.jar appcompat_v7_2.jar andr
当使用一些第三方库时,我将依赖项添加到模块的build.gradle文件中。 或者我添加一个插件 有时,库需要向应用的build.gradle文件添加依赖项。 这些依赖项和插件之间有什么区别 为什么不能在一个构建中设置它们。格雷德尔档案? 所有的建议都很感谢,我在搜索这方面的信息时遇到了困难
问题内容: 当将Eclipse 3.7 Indigo用于Java EE开发人员时,有一种称为 Deployment Assembly 。我可以在google上找到并了解它与 J2EE Module依赖关系 类似,在 其中我们可以选择jar,然后将其放到EAR文件夹中或WAR中的WEB-INF / lib中。现在我的疑问是, 我有一个JavaProject Dependencies 。我已经通过 c
我有个问题。 在pom.xml中,依赖项包含在两个地方。一个位置可以在标记中,另一个位置可以在标记中。 提前致谢:)
当您想将库添加到您的项目时,IntelliJ IDEA中的“模块依赖项”和“库”有什么区别?此外,当您将库添加到IntelliJ IDEA中的“模块依赖项”时,“导出”复选框是什么? 在每种方式中,类和代码是如何包含在所包含的