• dependencies
  • devDependencies
  • peerDependencies
  • optionalDependencies
  • bundledDependencies

    不同的依赖有着不同的目的。 开发构建时需要一部分,程序运行时也需要一部分。 因此有着不同的依赖类型(比如 dependenciesdevDependenciespeerDependencies)。

    package.json 可以包含以下依赖类型:

    1. {
    2. "name": "my-project",
    3. "dependencies": {
    4. "package-a": "^1.0.0"
    5. },
    6. "devDependencies": {
    7. "package-b": "^1.2.1"
    8. },
    9. "peerDependencies": {
    10. "package-c": "^2.5.4"
    11. },
    12. "optionalDependencies": {
    13. "package-d": "^3.1.0"
    14. }
    15. }

    大多数情况下只会用到 dependenciesdevDependencies,但这些类型都很重要。

    dependencies

    这是所谓的常规依赖,确切地说,是代码运行时所需要的(比如 React 和 immutableJS)。

    devDependencies

    这是开发依赖,就是那些只在开发过程中需要,而运行时不需要的依赖(比如 Babel 和 Flow)。

    peerDependencies

    这是“同伴依赖”,一种特殊的依赖,在发布包的时候需要。

    有这种依赖意味着安装包的用户也需要和包同样的依赖。 这对于像 react 这样也被人安装的、需要单一 react-dom 副本的包很有用。

    optionalDependencies

    这是可选依赖,意味着依赖是……可选的。这种依赖即便安装失败,Yarn也会认为整个依赖安装过程是成功的。

    这种类型适用于那些即便没有成功安装可选依赖,也有后备方案的情况(比如 Watchman)。

    bundledDependencies

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

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

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

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

    原文: https://yarnpkg.com/zh-Hans/docs/dependency-types