依赖的类型

依赖服务于众多不同的目的。 你需要一些依赖项来构建项目,当你运行程序时还需要其它依赖。 你可以有不同类型的依赖(比如 dependenciesdevDependenciespeerDependencies)。

你的 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"
  }
}

大多数人只有 dependenciesdevDependencies,但其中每个对于理解都很重要。

dependencies

这些是普通依赖,或者确切的说当你运行代码时需要(比如 React 或 immutableJS)。

devDependencies

这些是你的开发依赖,你在开发流程中需要但运行你的代码时不需要的依赖(比如 Babel 或 Flow)。

peerDependencies

平行依赖是一种特别的依赖类型,只用于你发布自己的包。

有平行依赖意味着你的包需要一个依赖项,它是安装你的包的人也同样依赖的。 这对于像 react 这样也被人安装的、需要单一 react-dom 副本的包很有用。

optionalDependencies

可选依赖仅仅是:可选。如果它们安装失败,Yarn 仍然说安装过程是成功的。

这用于不需要在每台机器上都运行的,并且在它们没安装时你也会有后备方案的依赖(例如 Watchman)。

bundledDependencies

当发布包时会一起打包的包名数组。

捆绑依赖应该在你项目内部。这个功能基本上和普通依赖相同。当运行 yarn pack 时它们也会被打包。

普通依赖通常从 npm 注册表安装。普通依赖不够用的情况下捆绑依赖很有用:

  • 当你想重用不来自于 npm 注册表或修改过的第三方库时。
  • 当你想把自己的项目作为模块来重用时。
  • 当你想和你的模块一起发布一些文件时。