在node.js中,开发依赖项和依赖项的区别

20

在一个Node项目中,我发现了两种依赖:

    "dependencies": {
        "axios": "0.9.1",
        "express": "4.13.4",
        "lodash": "4.6.1",
        "react": "^0.14.7",
        "react-dom": "^0.14.7",
        "react-redux": "^4.4.0",
        "react-router": "^2.0.0",
        "redux": "^3.3.1"
      },
      "devDependencies": {
        "babel-core": "^6.5.2"
}

我知道作者通过 npm install babel-core --save-dev 安装了它。

但是这是用来做什么的呢?当你上传你的代码时,devDependencies 模块仍然存在。


2
当你在谷歌上搜索时,第一个结果会回答你的问题。 - Deendayal Garg
最佳参考链接是 - https://dev59.com/VmMk5IYBdhLWcg3w5B3y - Renuka Misal
这是最好的链接:https://dev59.com/VmMk5IYBdhLWcg3w5B3y - Renuka Misal
3个回答

17

我写了一篇有关此事的文章,但它被撤下了。

文章摘录:

mod-a
  dev-dependents:
    - mod-b
  dependents:
    - mod-c

mod-d
  dev-dependents:
    - mod-e
  dependents:
    - mod-a

----

npm install mod-d

installed modules:
  - mod-d
  - mod-a
  - mod-c

----

checkout the mod-d code repository

npm install

installed modules:
  - mod-a
  - mod-c
  - mod-e

发布到npm

如果你要发布到npm,那么使用正确的标志对于正确的模块非常重要。如果某个模块是你的npm模块需要使用的,则使用“--save”标志将该模块保存为依赖项。如果某个模块不是你的模块所需的功能,但需要用于测试,则使用“--save-dev”标志。

# For dependent modules
npm install dependent-module --save

# For dev-dependent modules
npm install development-module --save-dev

非NPM用户注意

如果你不打算在npm上发布,使用哪个标志实际上并不重要。但是,我发现对于引入非标准代码的模块,使用“--save”标志是一个好习惯。然后对于编译器必须使用的模块,请使用“--sav-dev”标志。

# For modules that introduce non-standard source code
npm install source-module --save

# For modules that your compiler needs to function
npm install compiler-module --save-dev

3
是的,我写了这篇文章:P。 - Daniel Tonon
是的,这两个解释都对我很有帮助。 - Faris Rayhan
好的,我找到了为什么链接停止工作的原因。我在 LinkedIn 上只有一个免费账户,显然免费账户似乎有文章查看限制。我正在寻找一个新的家。当它在新的位置可供阅读时,我会更新答案。 - Daniel Tonon
关于文章的最新进展。我尝试将其发表,出版商对此表示了兴趣,但如果他们要发表它,需要添加更多有关其他事情的细节。我还没有完成根据他们要求进行的更改更新文章(我一直在拖延一点)。由于npm网站最近更改了样式,我还需要更新它。 - Daniel Tonon
FYI,我从未重新发布过这篇文章。我认为这里的答案已经足够表达我的意思了。 - Daniel Tonon

13

依赖 vs 开发依赖

开发依赖是仅在开发期间需要的模块,而依赖是运行时所需的模块。如果要部署应用程序,则必须安装依赖项,否则您的应用程序将无法正常工作。从您的代码中调用的库使程序运行的内容可以视为依赖项。

例如- React,React-dom

开发依赖模块不需要安装在生产服务器上,因为您不会在该机器上进行开发。将您的代码转换为JavaScript的编译器、测试框架和文档生成器可以被视为开发依赖项,因为它们只在开发期间需要使用。

例如- ESLint,Babel,Webpack


5
两者的主要区别是:
-在devdependencies中,开发人员根据需求自定义或修改节点软件包。例如,在创建Grunt任务时,我们会根据Gruntfile中的要求更改任务,这也适用于您正在使用的Babel。
-在dependencies中,开发人员直接使用节点软件包而不进行更改,例如Express。
希望这可以解决您的疑虑。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接