Npm install 原理

一、在执行npm install 的时候发生了什么?

首先安装的依赖都会存放在根目录的node_modules文件夹中,默认采用扁平化的方式安装。并且排序规则是:.bin文件 > @系列 > 字母(abcd)。并且排序的算法是广度优先遍历,在遍历依赖树时,npm会首先处理项目根目录下的依赖,然后逐层处理每个依赖包的依赖,直到所有依赖都被处理完毕。在处理每个依赖时,npm会检查该依赖的版本号是否符合依赖树中其他依赖的版本要求,如果不符合,则会尝试安装适合的版本。

二、扁平化?

当依赖树第一层分别依赖a,b,c。当b依赖于c的时候,理想状态下,会直接关联b和c的关联关系,但是如果b依赖于c,但是c的另一个版本,这时候属于非理想状态下,b就不能直接依赖c,而是去构建属于自己的node-modules。这时候就会产生冗余代码,属于非扁平化。

三、npm install 后续流程
四、npmrc配置文件
复制代码
registry=http://registry.npmjs.org/
# 定义npm的registry,即npm的包下载源

proxy=http://proxy.com:8888/
# 定义npm的代理服务器,用于访问网络

https-proxy=http://proxy.example.com:8888/
# 定义npm的https代理服务器,用于访问网络

strict-ssl=true
# 是否在SSL证书验证错误时退出

cafile=/path/to/cafile.pem
# 定义自定义CA证书文件的路径

user-agent=npm/{npm-version} node/{node-version} {platform}
# 自定义请求头中的User-Agent

save=true
# 安装包时是否自动保存到package.json的dependencies中

save-dev=true
# 安装包时是否自动保存到package.json的devDependencies中

save-exact=true
# 安装包时是否精确保存版本号

engine-strict=true
# 是否在安装时检查依赖的node和npm版本是否符合要求

scripts-prepend-node-path=true
# 是否在运行脚本时自动将node的路径添加到PATH环境变量中
五、package-lock.json 的作用
  1. version 该参数指定了当前包的版本号
  2. resolved 该参数指定了当前包的下载地址
  3. integrity 用于验证包的完整性
  4. dev 该参数指定了当前包是一个开发依赖包
  5. bin 该参数指定了当前包中可执行文件的路径和名称
  6. engines 该参数指定了当前包所依赖的Node.js版本范围

package-lock.json 帮我们做了缓存,他会通过 name + version + integrity 信息生成一个唯一的key,这个key能找到对应的index-v5 下的缓存记录 也就是npm cache 文件夹下的index-v5文件,如果发现有缓存记录,就会找到tar包的hash值,然后将对应的二进制文件解压到node_modeules。

相关推荐
程序员黑豆14 分钟前
鸿蒙应用开发:@Link 装饰器实现父子组件双向同步
前端·后端·harmonyos
前端炒粉15 分钟前
简易实现ssr
开发语言·前端·javascript
顶级自由人27 分钟前
【前端菜鸟的补课01】Zod 与 PostgreSQL 全栈数据工程教学
前端·后端·程序员
swipe1 小时前
11|(前端转全栈)购物车不能只存在前端:用户维度数据如何在后端落库
前端·后端·全栈
meilindehuzi_a2 小时前
Node.js + LangChain.js + Milvus 实战:从 EPUB 入库到《天龙八部》RAG 问答系统
javascript·langchain·node.js
Chengbei113 小时前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
不简说3 小时前
JS 代码技巧 vol.9 — 20 个设计模式在真实项目里的应用
前端·javascript·github
CoderLiu3 小时前
Agent 工程的下一层:为什么「把流程写成图」还不够,还需要 Graph Engineering
前端·人工智能·后端
勇往直前plus3 小时前
Vue3(篇三) Element Plus
前端·javascript·typescript·vue
爱勇宝4 小时前
《道德经》第 8 章:真正高级的能力,像水一样成事
前端·后端·程序员