Open tomoya06 opened 4 years ago
npm 是 Node 的模块管理器,功能极其强大。它是 Node 获得成功的重要原因之一。
本文参考壹题和阮一峰的博客
首层依赖,从package.json中获取,即dependencies / devDependencies属性,根据首层依赖分别逐级获取各个模块的依赖,得到依赖树
package.json
dependencies / devDependencies
依赖树中可能存在大量重复模块,例如A、B两模块都依赖了C。npm中加入了dedupe过程,会遍历依赖树的所有节点,都加到根节点上,同时会处理和处理重复模块。
重复模块:指的是模块名相同且 semver 兼容。每个 semver 都对应一段版本允许范围,如果两个模块的版本允许范围存在交集,那么就可以得到一个兼容版本。
如果不存在兼容版本,则会分别安装两个版本的依赖,以moduleC@version1和moduleC@version2的形式都保存到依赖树中,下载并安装。
moduleC@version1
moduleC@version2
本节参考掘金博客
版本号一般有三个部分,以.隔开,就像X.Y.Z,其中
.
X.Y.Z
每个部分为整数(>=0),按照递增的规则改变。 在修订版本号的后面可以加上其他信息,用-连接,比如:
X.Y.Z-Alpha
X.Y.Z-Beta
X.Y.Z-Stable
npm依赖项支持一定范围内的版本。分别用^ / ~ / x / -等符号表示:
^ / ~ / x / -
^
^15.6.1 = [15.6.1, 15.9.999]
~
~15.6.1 = [15.6.1, 15.6.999]
x
15.x = [15.0, 16.0)
-
0.1.0 - 2= [0.1.0, 2.999.999]
preinstall、install、postinstall、prepublish、prepare等
基于libuv实现。对比浏览器中的事件循环,可以看这里
socket.on('close', ...)
Node 10以前:
Node 11以后:与浏览器一致,即每执行一个宏任务就执行完微任务队列。
NPM
npm 是 Node 的模块管理器,功能极其强大。它是 Node 获得成功的重要原因之一。
npm install 安装过程
安装机制概述
获取依赖模块
首层依赖和依赖树
首层依赖,从
package.json
中获取,即dependencies / devDependencies
属性,根据首层依赖分别逐级获取各个模块的依赖,得到依赖树模块扁平化
依赖树中可能存在大量重复模块,例如A、B两模块都依赖了C。npm中加入了dedupe过程,会遍历依赖树的所有节点,都加到根节点上,同时会处理和处理重复模块。
重复模块:指的是模块名相同且 semver 兼容。每个 semver 都对应一段版本允许范围,如果两个模块的版本允许范围存在交集,那么就可以得到一个兼容版本。
如果不存在兼容版本,则会分别安装两个版本的依赖,以
moduleC@version1
和moduleC@version2
的形式都保存到依赖树中,下载并安装。npm semver
版本号一般有三个部分,以
.
隔开,就像X.Y.Z
,其中每个部分为整数(>=0),按照递增的规则改变。 在修订版本号的后面可以加上其他信息,用-连接,比如:
X.Y.Z-Alpha
: 内测版X.Y.Z-Beta
: 公测版X.Y.Z-Stable
: 稳定版npm依赖项支持一定范围内的版本。分别用
^ / ~ / x / -
等符号表示:^
: 匹配大于X.Y.Z
的更新Y、Z的版本号,例如^15.6.1 = [15.6.1, 15.9.999]
~
: 匹配大于X.Y.Z
的更新Z的版本号,例如~15.6.1 = [15.6.1, 15.6.999]
x
: 可以替代X、Y、Z中任意一个,表示该位置可更新,例如15.x = [15.0, 16.0)
-
: 包含第一个版本号和第二个版本号的范围,表示的是一个闭区间,例如0.1.0 - 2= [0.1.0, 2.999.999]
npm生命周期
preinstall、install、postinstall、prepublish、prepare等