我正在尝试理解何时何地使用这些标签,我知道一个是用于dev-dependency,另一个是用于project dependency,但在使用live project时,我发现它们之间没有任何区别。 我正在寻找一种方法,可以检测出错误类型的安装。 有没有办法做到这一点?
dependencies
代表你的项目依赖的模块,devDependencies
代表你用于开发项目的模块。您可以在npmjs网站上阅读详细说明:
如果有人计划下载并在其程序中使用您的模块,则他们可能不想或不需要下载和构建您使用的外部测试或文档框架。
在这种情况下,最好将这些附加项映射到一个devDependencies对象中。
依赖项的示例:request
,concat-stream
,object.assign
,through2
。
devDependencies的示例:mocha
,tape
,eslint
,grunt
,browserify
。
dependencies始终在安装或初始化项目时安装,因为它们是项目运行所必需的。devDependencies仅针对开发(测试框架、任务运行器等),只有当有人从项目根目录运行npm install
时才会安装它们,例如,在克隆项目存储库之后。
您可以轻松验证这一点。假设我在同一目录中有模块foo
、bar
、baz
和quux
。让foo
是baz
的一个依赖项,bar
是baz
的devDependency,并且baz
本身是quux
的一个依赖项。
#/$ cd baz
#/baz$ cat package.json
{
"name": "baz",
"version": "0.0.0",
"dependencies": {
"foo": "../foo"
},
"devDependencies": {
"bar": "../bar"
}
}
#/baz$ npm install
baz@0.0.0 /tmp/tmpdir/g6jBr9/baz
├── bar@0.0.0
└── foo@0.0.0
你可以看到,依赖和开发依赖都已安装。
现在让我们将 baz
安装为 quux
的一个依赖项:
#/$ cd quux
#/quux$ cat package.json
{
"name": "quux",
"version": "0.0.0",
"dependencies": {
"baz": "../baz"
}
}
#/quux$ npm install
#/quux$ npm ls
quux@0.0.0 /tmp/tmpdir/g6jBr9/quux
└─┬ baz@0.0.0
└── foo@0.0.0
注意,foo
已经安装,但bar
没有。这是因为如果你将某个模块作为另一个模块的依赖(即你是该模块的消费者),则你不需要该模块的devDependencies,因为它们对该模块的功能没有影响。
npm install
默认会安装 devDependencies 和 dependencies。如果你想忽略 devDependencies 的安装,需要使用特定的标志或设置。参见 npm help install
:
With the --production flag (or when the NODE_ENV environment variable
is set to production), npm will not install modules listed in
devDependencies.
当你需要使用应用程序主要部分或将在生产中需要的内容时,请勿使用--save-dev
或添加到devDependencies
。通常只有在测试和构建等方面才需要使用devDependencies
。
说实话,我并没有看到使用devDependencies
会带来巨大的好处。不使用它可以节省极少的空间和时间。使用它,你可能会排除掉一个重要的依赖项。虽然我不是说不要使用它,但对于一些项目来说,你可能不需要担心它。
npm help install
这将为您打开一个本地文件的网页。
从网页上,有许多选项可供提供给npm install
,并进行列出和解释。
以下是其中一部分,从npm功能角度回答了您的问题。
点击查看截图。(我还不允许在我的帖子中嵌入图片)
其中的主要部分如下所示:
npm install saves any specified packages into dependencies by default. Additionally,
you can control where and how they get saved with some additional flags:
-P, --save-prod: Package will appear in your dependencies. This is the default unless -D or -O are present.
-D, --save-dev: Package will appear in your devDependencies.
-O, --save-optional: Package will appear in your optionalDependencies.
--no-save: Prevents saving to dependencies.