依赖的类型

不同的依赖有着不同的目的。 开发构建时需要一部分,程序运行时也需要一部分。 因此有着不同的依赖类型(比如 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

这是“打包依赖”,在发布包时,这个数组里的包都会被打包(Bundle)。

这种类型的依赖应该在项目内部使用,基本上和普通依赖相同。执行 yarn pack 同样会进行打包。

普通依赖通常从 npm registry 安装,这些情况下,打包依赖比普通依赖更好用:

  • 当你想使用一个不在 npm registry 里的,或者被修改过的第三方库时;
  • 当你想把自己的项目作为模块来重用时;
  • 当你想和你的模块一起发布一些文件时。