dependency和devDependency的区别
package-a
--- package-b (dependency)
--- | --- package-c (devDependency)
--- | --- package-cc (dependency)
--- package-d (devDependency)
--- | --- package-e (dependency)
npm install
后,package-b、package-d、package-cc,package-e 会被安装,其它不会被安装。npm install --production
后,package-b、package-cc 会被安装。其它不会被安装。
> npm install react --save // 做为 dependencies 安装
> npm install eslint --save-dev // 做为 devDependencies 安装
peerDependencies
package-a
--- package-b (dependency)
--- | --- package-c (dependency)
--- package-c (dependency)
在npm1和npm2中,npm install
后,会有两次package-c的下载和安装。
package-b的package.json,设定peerDependencies为package-c后,会只下载和安装一次package-c。
在npm3中,依赖树扁平化,peerDependencies中声明的依赖不会被npm自动安装,而是输出warning日志。
optionalDependencies
npm install
optionalDependencies指定的包失败后,依然能继续安装。
bundleDependencies(bundledDependencies)
一个包含了包名称的数组,这些包会在发布一起被打包
Bundled dependencies 应该在您的项目中。该功能基本上与正常的dependencies相同。当运行yarn pack时,它们也会被打包
正常的dependencies通常从npm的registry中安装。Bundled Dependencies在正常的dependencies不足的情况下很有用:
当您想重新使用不是来自npm registry或者被修改的第三方库时
当您想重新使用您自己的项目作为模块时
当您想要分发一些文件和您的模块时
实用策略
- 升级到NPM3,保持依赖树扁平化
- 固定模块版本号,不使用
~,^,<,>
这些不确定的版本标识符 - 不用peerDependencies
参考链接:
http://javascript.ruanyifeng.com/nodejs/packagejson.html
https://github.com/SamHwang1990/blog/issues/7
http://yarnpkg.top/DependencyType.html
https://segmentfault.com/a/1190000008398819