tomoya06 / web-developer-guidance

Actually it's just a notebook for keeping down some working experience.
4 stars 0 forks source link

JavaScript - NodeJS #18

Open tomoya06 opened 4 years ago

tomoya06 commented 4 years ago

NPM

npm 是 Node 的模块管理器,功能极其强大。它是 Node 获得成功的重要原因之一。

本文参考壹题阮一峰的博客

npm install 安装过程

安装机制概述

  1. 发出npm install命令
  2. 查询node_modules目录之中是否已经存在指定模块
    • 若存在,不再重新安装
    • 若不存在:npm 向 registry 查询模块压缩包的网址;下载压缩包,存放在根目录下的.npm目录里,当然若有缓存就不用重新下载了;解压压缩包到当前项目的node_modules目录
  3. 执行工程自身生命周期

获取依赖模块

首层依赖和依赖树

首层依赖,从package.json中获取,即dependencies / devDependencies属性,根据首层依赖分别逐级获取各个模块的依赖,得到依赖树

模块扁平化

依赖树中可能存在大量重复模块,例如A、B两模块都依赖了C。npm中加入了dedupe过程,会遍历依赖树的所有节点,都加到根节点上,同时会处理和处理重复模块。

重复模块:指的是模块名相同且 semver 兼容。每个 semver 都对应一段版本允许范围,如果两个模块的版本允许范围存在交集,那么就可以得到一个兼容版本。

如果不存在兼容版本,则会分别安装两个版本的依赖,以moduleC@version1moduleC@version2的形式都保存到依赖树中,下载并安装。

npm semver

本节参考掘金博客

版本号一般有三个部分,以.隔开,就像X.Y.Z,其中

每个部分为整数(>=0),按照递增的规则改变。 在修订版本号的后面可以加上其他信息,用-连接,比如:

npm依赖项支持一定范围内的版本。分别用^ / ~ / x / -等符号表示:

npm生命周期

preinstall、install、postinstall、prepublish、prepare等

tomoya06 commented 4 years ago

Node中的Event Loop

基于libuv实现。对比浏览器中的事件循环,可以看这里

image

微任务和宏任务在Node的执行顺序

Node 10以前:

Node 11以后:与浏览器一致,即每执行一个宏任务就执行完微任务队列。