nodejs的dependency.md

时间:2023-03-09 04:09:49
nodejs的dependency.md

dependency和devDependency的区别

package-a

--- package-b (dependency)

--- | --- package-c (devDependency)

--- | --- package-cc (dependency)

--- package-d (devDependency)

--- | --- package-e (dependency)

npm install后,package-b、package-d、package-cc,package-e 会被安装,其它不会被安装。

npm install --production后,package-b、package-cc 会被安装。其它不会被安装。

> npm install react --save  // 做为 dependencies 安装
> npm install eslint --save-dev // 做为 devDependencies 安装

peerDependencies

package-a

--- package-b (dependency)

--- | --- package-c (dependency)

--- package-c (dependency)

在npm1和npm2中,npm install后,会有两次package-c的下载和安装。

package-b的package.json,设定peerDependencies为package-c后,会只下载和安装一次package-c。

在npm3中,依赖树扁平化,peerDependencies中声明的依赖不会被npm自动安装,而是输出warning日志。

optionalDependencies

npm install optionalDependencies指定的包失败后,依然能继续安装。

bundleDependencies(bundledDependencies)

一个包含了包名称的数组,这些包会在发布一起被打包

Bundled dependencies 应该在您的项目中。该功能基本上与正常的dependencies相同。当运行yarn pack时,它们也会被打包

正常的dependencies通常从npm的registry中安装。Bundled Dependencies在正常的dependencies不足的情况下很有用:

当您想重新使用不是来自npm registry或者被修改的第三方库时

当您想重新使用您自己的项目作为模块时

当您想要分发一些文件和您的模块时

实用策略

  1. 升级到NPM3,保持依赖树扁平化
  2. 固定模块版本号,不使用~,^,<,>这些不确定的版本标识符
  3. 不用peerDependencies

参考链接:

http://javascript.ruanyifeng.com/nodejs/packagejson.html

https://github.com/SamHwang1990/blog/issues/7

http://yarnpkg.top/DependencyType.html

https://segmentfault.com/a/1190000008398819