不同的依赖有着不同的目的。 开发构建时需要一部分,程序运行时也需要一部分。 因此有着不同的依赖类型(比如 dependencies
、devDependencies
和 peerDependencies
)。
package.json
可以包含以下依赖类型:
{
"name": "my-project",
"dependencies": {
"package-a": "^1.0.0"
},
"devDependencies": {
"package-b": "^1.2.1"
},
"peerDependencies": {
"package-c": "^2.5.4"
},
"optionalDependencies": {
"package-d": "^3.1.0"
}
}
大多数情况下只会用到 dependencies
和 devDependencies
,但这些类型都很重要。
dependencies
这是所谓的常规依赖,确切地说,是代码运行时所需要的(比如 React 和 immutableJS)。
devDependencies
这是开发依赖,就是那些只在开发过程中需要,而运行时不需要的依赖(比如 Babel 和 Flow)。
peerDependencies
这是“同伴依赖”,一种特殊的依赖,在发布包的时候需要。
有这种依赖意味着安装包的用户也需要和包同样的依赖。 这对于像 react
这样也被人安装的、需要单一 react-dom
副本的包很有用。
optionalDependencies
这是可选依赖,意味着依赖是……可选的。这种依赖即便安装失败,Yarn也会认为整个依赖安装过程是成功的。
这种类型适用于那些即便没有成功安装可选依赖,也有后备方案的情况(比如 Watchman)。
bundledDependencies
这是“打包依赖”,在发布包时,这个数组里的包都会被打包(Bundle)。
这种类型的依赖应该在项目内部使用,基本上和普通依赖相同。执行 yarn pack
同样会进行打包。
普通依赖通常从 npm registry 安装,这些情况下,打包依赖比普通依赖更好用:
- 当你想使用一个不在 npm registry 里的,或者被修改过的第三方库时;
- 当你想把自己的项目作为模块来重用时;
- 当你想和你的模块一起发布一些文件时。