依赖的类型
依赖服务于众多不同的目的。 你需要一些依赖项来构建项目,当你运行程序时还需要其它依赖。 你可以有不同类型的依赖(比如 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
当发布包时会一起打包的包名数组。
捆绑依赖应该在你项目内部。这个功能基本上和普通依赖相同。当运行 yarn pack
时它们也会被打包。
普通依赖通常从 npm 注册表安装。普通依赖不够用的情况下捆绑依赖很有用:
- 当你想重用不来自于 npm 注册表或修改过的第三方库时。
- 当你想把自己的项目作为模块来重用时。
- 当你想和你的模块一起发布一些文件时。