笔记而已方便自己回顾
npm模块安装机制
-
执行npm install
-
安装机制
1.查询node_module中是否存在了指定模块,若存在,不需安装
2.若npm中不存在相关模块,npm会找到安装包的地址,下载安装包到.npm文件目录下,在解压到node_module下
一个工程项目,在npm install之后都干了什么?
- npm install 之后,会根据package.json生成安装依赖树,首先根据dependencies(生产环境依赖)、devDependencies(开发环境依赖)指定模块确定首层安装依赖.
工程本身是整棵依赖树的根节点,每个首层依赖模块都是根节点下面的一棵子树,npm 会开启多进程从每个首层依赖模块开始逐步寻找更深层级的节点。
- 获取依赖的每一个模快都是是一个递归的过程,获取模块需要确定版本,这里确定的方式依据package.json和package.lock.json.
比对package.json和package.lock.json文件,若对应模块版本相同,直接按照lock文件确定版本,若不同,lock文件根据依据package.json中的不同进行更新.若两者之间版本能够兼容,lock中版本优先级高一些.
-
确认版本之后,获取实体,若本地有缓存,直接取本地,若没有缓存,重新下载.
-
npm3之前,模块内部依赖项目模块.不同模块可能会依赖同一种模块,导致依赖树递归的时候某些模块多次安装,为了避免多次安装,npm3之后对依赖树进行扁平化,遍历依赖书所有节点,把相关模块安装在根目录下,且已安装过的模块不在安装.
这里说到安装依赖树的扁平化,可能需要了解一下npm yarn pnpm对包管理的 npm3之后与yarn现在都是采用平铺的方式,防止同样的依赖多次复制. 对于pnpm,相同的依赖不采用复制的方式.采用link(软硬链接的形式).只在全局仓库保存一份,其余地方都用link.依赖只存在一份,大大的提升了磁盘空间.