例如: project dependency 依赖如下: dependencies: { ”a”: ‘0.0.1’, ”b”: ”0.0.2 }, devDependencies: { ”c”: “0.0.3” }, npm install 会将 a b c 三个包都安装。而 npm install –production 只会安装 a b 两个包。 假如: 包 a 依赖两个包 x y; dependencies: { ”x”: ‘0.0.1’ }, devDependencies: { ”y”: “0.0.2” }, 那么在项目 project dependency 中 npm install 会将 x 这个包安装,而 y 这个包不会安装。因为 依赖 a,但是不没有要开发 a,依赖的应该是 a 的产物才对。
peerDependencies 假设: project dependency 依赖 的 b 包,但是 b 包并没有 dependencies 而有一个 peerDependencies。 peerDependencies: { ”a”: “0.0.1” }, 对于 b 包来说,host(宿主) 是 project dependency,那么一般使用 b 包的时候,几乎可以肯定的是会使用 a 包,所以 a 此时就可以是 b 的一个 peerDependencies。 即:在使用 b 包的时候,几乎可以肯定的是要使用 a 包。所以 b 包没有 dependencies 而有 peerDependencies。 此时 npm install project dependency 的依赖时,就将 b 包 的依赖也装上了,所以不需要显式的声明 b 包 的 dependencies 了。 不过如果 b 包 的 peerDependencies 和 宿主的依赖版本不同的时候,可能会出问题,所以此时最好将两个版本统一。例如 project dependency 依赖的 a 包,和 b 包 peerDependencies 依赖的 a 包。