在一个节点项目中,我发现了两种依赖:
"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
模块仍然存在。
答案 0 :(得分:11)
我写了一篇关于此的文章,但它被删除了。
文章摘录:
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模块需要运行的东西,那么使用“--save”标志将模块保存为依赖项。如果它是您的模块不需要运行但需要进行测试的东西,那么请使用“--save-dev”标志。
# For dependent modules
npm install dependent-module --save
# For dev-dependent modules
npm install development-module --save-dev
如果您不发布到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
答案 1 :(得分:5)
两者之间的主要区别是:
-in devdependencies,开发人员根据需要自定义或修改节点包。例如,在执行grunt任务时,我们根据Gruntfile中的要求更改任务,与使用babel的情况相同。
-in dependencies,开发人员直接使用节点包而不需要更改ex-express。
希望它能清除你的怀疑。
答案 2 :(得分:3)
依赖关系vs开发依赖关系
Dev依赖项是仅在开发期间需要的模块,而在运行时需要依赖项。 如果要部署应用程序,则必须安装依赖项,否则您的应用程序将无法运行。您从代码中调用以使程序运行的库可以被视为依赖。
Eg- React,React - dom
不需要在生产服务器中安装Dev依赖模块,因为你不会在那台机器上进行开发。将代码转换为javascript,编译框架和文档生成器的编译器可以被认为是dev依赖项,因为它们仅在需要时才需要发展。
Eg- ESLint,Babel,webpack