Nodejs 第四章(Npm install 原理)
在执行npm install 的时候发生了什么?
首先安装的依赖都会存放在根目录的node_modules,默认采用扁平化的方式安装,并且排序规则.bin第一个然后@系列,再然后按照首字母排序abcd等,并且使用的算法是广度优先遍历,在遍历依赖树时,npm会首先处理项目根目录下的依赖,然后逐层处理每个依赖包的依赖,直到所有依赖都被处理完毕。在处理每个依赖时,npm会检查该依赖的版本号是否符合依赖树中其他依赖的版本要求,如果不符合,则会尝试安装适合的版本

扁平化?
扁平化只是理想状态如下

安装某个二级模块时,若发现第一层级有相同名称,相同版本的模块,便直接复用那个模块
因为A模块下的C模块被安装到了第一级,这使得B模块能够复用处在同一级下;且名称,版本,均相同的C模块
非理想状态下

因为B和A所要求的依赖模块不同,(B下要求是v2.0的C,A下要求是v1.0的C )所以B不能像2中那样复用A下的C v1.0模块 所以如果这种情况还是会出现模块冗余的情况,他就会给B继续搞一层node_modules,就是非扁平化了。
npm install 后续流程

具体过程看图就可以了很详细
至于npmrc可以配置什么给大家一个demo参考
registry=http://registry.npmjs.org/
# 定义npm的registry,即npm的包下载源proxy=http://proxy.example.com:8080/
# 定义npm的代理服务器,用于访问网络https-proxy=http://proxy.example.com:8080/
# 定义npm的https代理服务器,用于访问网络strict-ssl=true
# 是否在SSL证书验证错误时退出cafile=/path/to/cafile.pem
# 定义自定义CA证书文件的路径user-agent=npm/{npm-version} node/{node-version} {platform}
# 自定义请求头中的User-Agentsave=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 的作用
很多朋友只知道这个东西可以锁定版本记录依赖树详细信息
- version 该参数指定了当前包的版本号
- resolved 该参数指定了当前包的下载地址
- integrity 用于验证包的完整性
- dev 该参数指定了当前包是一个开发依赖包
- bin 该参数指定了当前包中可执行文件的路径和名称
- engines 该参数指定了当前包所依赖的Node.js版本范围
知识点来了,package-lock.json 帮我们做了缓存,他会通过 name + version + integrity 信息生成一个唯一的key,这个key能找到对应的index-v5 下的缓存记录 也就是npm cache 文件夹下的

如果发现有缓存记录,就会找到tar包的hash值,然后将对应的二进制文件解压到node_modeules

相关文章:
Nodejs 第四章(Npm install 原理)
在执行npm install 的时候发生了什么? 首先安装的依赖都会存放在根目录的node_modules,默认采用扁平化的方式安装,并且排序规则.bin第一个然后系列,再然后按照首字母排序abcd等,并且使用的算法是广度优先遍历,在遍历依…...
[深度学习] GPU处理能力(TFLOPS/TOPS)
计算能力换算 理论峰值 = GPU芯片数量GPU Boost主频核心数量*单个时钟周期内能处理的浮点计算次数 只不过在GPU里单精度和双精度的浮点计算能力需要分开计算,以最新的Tesla P100为例: 双精度理论峰值 = FP64 Cores *…...
js:获取浏览器默认语言
实现代码 navigator.language zh-CN参考文章 [javascript] js如何获取浏览器的语言...
【U8+】用友U8重新注册加密锁,提示:写卡失败,请重新配置客户端控件。
【问题描述】 用友U8软件重新安装后,需要重新注册加密锁激活软件。 注册反馈提示:产品注册失败。 原因(1):写卡失败,请重新配置客户端控件。 【解决方法】 1、打开控制面板,网络和 Internet&a…...
uniapp小程序console.log在微信开发者工具中不打印问题
最近在开发一款uniapp小程序,发现console.log在微信开发者工具中不打印,但在H5页面就能够有打印输出,于是在网上寻找原因… 主要是由于vue.config.js文件中有设置发布时删除console的配置,如下: 官网参考地址&#x…...
从零基础开始开发自己的第一个微信小程序
文章目录 内容介绍小程序开发步骤注册微信小程序账号下载开发工具搭建开发环境创建工程编写代码手机上查看效果 工程里的文件作用介绍总结 内容介绍 通过本篇blog,你可以熟悉从零开始,搭建小程序开发环境,并运行起自己的第一个小程序。 小程…...
无涯教程-Lua - Arrays(数组)
数组是对象的有序排列,可以是包含行集合的一维数组,也可以是包含多行和多列的多维数组。 在Lua中,数组是使用带有整数的索引表实现的。数组的大小不是固定的,并且可以根据无涯教程的要求(取决于内存限制)来增长。 一维数组 一维…...
0基础学习VR全景平台篇 第76篇:全景相机-圆周率全景相机如何直播推流
圆周率科技,成立于2012年,是中国最早投身嵌入式全景算法研发的团队之一,亦是全球市场占有率最大的全景算法供应商。相继推出一体化智能屏、支持一键高清全景直播的智慧全景相机--Pilot Era和Pilot One,为用户带来实时畅享8K的高清…...
超详细|ChatGPT论文润色教程
本文讲述使用中科大开源ChatGPT论文辅助工具,对论文进行润色 祝看到本教程的小伙伴们都完成论文,顺利毕业。 可以加QQ群交流,一群: 123589938 第一章 介绍 今天给大家分享一款非常不错的ChatGPT论文辅助工具,使用了专…...
MMDeploy安装、python API测试及C++推理
服务器配置如下: Cuda版本:11.1 Cudnn版本:8.2.0 显卡版本:RTX3090 使用转换脚本将.pth模型转换为ONNX格式 python mmdeploy/tools/deploy.py \mmdeploy/configs/mmdet/detection/detection_onnxruntime_dynamic.py \mmdetect…...
[openCV]基于拟合中线的智能车巡线方案V3
import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir:文件夹根目录输入 ext: 扩展名返回: 文件路径列表"""newDir d…...
vite+typescript项目 :找不到模块“./***.vue”或其相应的类型声明——解决方案
vue3ts报错: 找不到模块“./App.vue”或其相应的类型声明。ts(2307) 解决方法: 1、在src文件夹找到 vite-env.d.ts 加入以下代码: declare module *.vue {import type { DefineComponent } from vueconst vueComponent: DefineComponent<…...
Gradio-YOLOv5-YOLOv7 搭建Web GUI
目录 0 相关资料:1 Gradio介绍2 环境搭建3 GradioYOLOv54 GradioYOLOv75 源码解释 0 相关资料: Gradio-YOLOv5-Det:https://gitee.com/CV_Lab/gradio_yolov5_det 【手把手带你实战YOLOv5-入门篇】YOLOv5 Gradio搭建Web GUI: https://www.bi…...
HTML模板生成word,pdf文档
1.获取html模板 public static void main(String[] args) {String htmlContent getHtmlFileContent(templateName,dataMap);String exportType "pdf";if (exportType.equals("pdf")){convertToPdf(htmlContent,filePath);}else {exportWord(htmlContent…...
ssl单向证书和双向证书校验测试及搭建流程
零、前提准备 首先了解下HTTP和HTTPS的区别: HTTPS与HTTP有什么不同? HTTP是过去很长一段时间我们经常用到的一种传输协议。HTTP协议传输的数据都是未加密的,这就意味着用户填写的密码、账号、交易记录等机密信息都是明文,随时…...
【2种方法,jmeter用一个正则提取器提取多个值!】
jmeter中,用json提取器,一次提取多个值,这个很多人都会。但是,用正则提取器一次提取多个,是否可以呢? 肯定,很多人都自信满满的说,可以!形如:token":&q…...
012-堆,结构体
012-堆,结构体 堆空间的申请和释放 堆空间特点? 栈空间的特点是,自动申请自动释放 堆空间由用户自己主动申请,主动释放 利用函数malloc进行堆空间的申请 利用函数free进行堆空间使用完毕后的释放 问题: 局部变量的存储空间在栈区; 全局变量的存储空…...
GDAL C++ API 学习之路 OGRGeometry 多边形类 OGRPolygon
OGRPolygon class OGRPolygon 是 OGR 几何图形库中的一个类,用于表示多边形的几何图形。它是一种封闭的多边形,由一个或多个外环(OGRLinearRing)和零个或多个内环(OGRLinearRing)组成。多边形是平…...
文件传输协议FTP与托管文件传输MFT有什么区别?
传输敏感数据是日常业务中不可或缺的一环。但是,在把敏感数据从A点搬到B点的过程中,保证该敏感数据的安全是组织的重要任务,因此最好选择一种能够确保文件安全的方案。 FTP与MFT有什么不同? FTP(文件传输协议…...
js实现按照句号将一段文本进行分段
/*** 将给定的文本按照300字并且按照句号分为多个p标签** param text 给定的文本* returns 返回分割后的多个p标签的数组*/ function splitTextByParagraph(text) {// 将文本按照句号分割成多个句子const sentences text.split(。);// 初始化一个空数组来存储生成的p标签const…...
浏览器插件:让Markdown预览效率提升300%的秘密武器
浏览器插件:让Markdown预览效率提升300%的秘密武器 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 作为开发者、学生或技术写作者,你是否经常遇到这些困扰…...
ai辅助开发,让快马智能生成centos下openclaw安装与配置的疑难解决方案
在CentOS系统上安装和配置OpenClaw这类工具时,经常会遇到各种依赖冲突、环境配置问题,以及需要定制化爬取规则的情况。传统方式下,我们需要手动查阅文档、调试命令,甚至反复尝试不同版本的依赖包,过程相当耗时。而借助…...
Claude Code能控制电脑了!开发全程不离终端,全无人值守模式启动
在官方演示中,只甩一个指令过去,AI就自己启动正在开发的应用,自己复现bug,自己修复,自己测试修复效果。 Claude Code上线Computer Use,直接捅破开发效率天花板。 在官方演示中,只甩一个指令过…...
数据库智能运维:利用PyTorch LSTM预测数据库性能瓶颈
数据库智能运维:利用PyTorch LSTM预测数据库性能瓶颈 1. 引言:当数据库遇上AI预测 凌晨三点,运维工程师小李被刺耳的报警声惊醒——核心数据库又崩溃了。这已经是本月第三次因为性能瓶颈导致的业务中断,每次损失都超过百万。传统…...
intv_ai_mk11开源镜像:transformers加载+健康接口+supervisor运维全栈开源
intv_ai_mk11开源镜像:transformers加载健康接口supervisor运维全栈开源 1. 项目概述 intv_ai_mk11是一个基于Llama架构的中等规模文本生成模型的开源镜像解决方案。这个项目将模型部署、服务管理和健康监控等环节进行了全栈整合,让开发者能够快速搭建…...
PowerBI进阶:除了DATEADD,这3种方法也能玩转同比环比(附场景选择指南)
PowerBI时间智能函数深度对比:突破DATEADD局限的实战指南 当你已经能熟练使用DATEADD计算同比环比,却发现报表加载速度越来越慢,或是遇到非标准财年分析需求时,是时候重新审视PowerBI的时间智能函数工具箱了。本文将带你深入剖析四…...
保姆级教程:用mintar版imu_utils搞定ZED2/Realsense相机内置IMU标定(避坑kalibr_allan)
保姆级教程:用mintar版imu_utils完成ZED2/Realsense相机IMU标定实战指南 当你在视觉惯性里程计(VIO)项目中遇到定位漂移问题时,很可能是因为IMU参数配置不当。与网上普遍推荐的kalibr_allan方法不同,本文将带你体验min…...
动态透视报表 + 查询接口 + Excel导出
动态透视报表 查询接口 Excel导出 ✅ 动态行维度(产品 / 型号 / 项目 任意组合)✅ 动态列维度(月份)✅ a / f 子表头✅ SQL 透视(适合 GaussDB)✅ 查询接口 EasyExcel 导出接口✅ 可复用报表引擎 整体…...
React+GSAP实战:5种酷炫滚动动画效果完整代码分享(含ScrollTrigger配置)
ReactGSAP实战:5种酷炫滚动动画效果完整代码分享(含ScrollTrigger配置) 在现代Web开发中,流畅的滚动动画已经成为提升用户体验的关键因素。作为前端开发者,我们经常需要实现各种吸引眼球的滚动效果,从简单的…...
MULTISIM仿真揭秘:如何设计高可靠性的光耦隔离PMOS驱动电路
1. 光耦隔离PMOS驱动电路的设计挑战 在工业控制和高压隔离场景中,PMOS驱动电路的设计往往面临诸多挑战。我曾在多个项目中遇到过MOS管因静电击穿而损坏的情况,也经历过因开关频率不足导致系统性能下降的尴尬。这些问题归根结底都与MOS管的特性有关。 MOS…...
