npm install 相关过程及分析

这篇具有很好参考价值的文章主要介绍了npm install 相关过程及分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、install 完整流程

1.1、根据 .npmrc 进行安装前环境配置

注意:镜像源就是在这个文件中配置的

优先级:

  1. 每个项目的配置文件(/path/to/my/project/.npmrc
  2. 每个工作区的配置文件(包含 pnpm-workspace.yaml 文件的目录)
  3. 每位用户的配置文件( ~/.npmrc )
  4. 全局配置文件( /etc/npmrc )

1.2、检查有无 lock.json文件

注意:npm/pnpm 检查的是 package-lock.json,yarn检查的是 yarn.lock,cnpm没有对应的lock文件,所以不会进行对比检查

1.2.1、无 lock文件

此时会按照package.json文件,去远程仓库获取依赖包的最新信息(此时并未下载依赖,这是获取依赖包的相关信息

1.2.2、有lock文件

来到重点了,package.json和package-lock.json的冲突,其实咱们现在npm版本估计都在v7左右了,所以不用考虑以前老版本的逻辑,按最新的来:

lock文件中依赖的版本在package.json的版本范围内,没有冲突,则按照lock文件的来,直接跳转步骤1.4。

否则按照package.json的来,有冲突(去远程仓库获取依赖包的最新信息

1.3、构建依赖树

  • 构建依赖树时,不管其是直接依赖还是子依赖的依赖,优先将其放置在 node_modules 根目录。
  • 当遇到相同模块时,判断已放置在依赖树的模块版本是否符合新模块的版本范围,如果符合则跳过,不符合则在当前模块的 node_modules 下放置该模块。
  • 注意这一步只是确定逻辑上的依赖树,并非真正的安装,后面会根据这个依赖结构去下载或拿到缓存中的依赖包

1.4、检查缓存

1.4.1、无缓存

继续进行后续步骤 1.5

1.4.2、有缓存

跳转步骤到 1.6

1.5、下载依赖包并添加到依赖

去远程仓库下载包,并进行校验,校验未通过则重新下载,校验通过后会将包下载到npm缓存中

1.6、解压到node_modules

1.7、生成lock文件

2、npm缓存策略

在执行 npm installnpm update命令下载依赖后,除了将依赖包安装在node_modules 目录下外,还会在本地的缓存目录缓存一份。通过 npm config get cache 命令可以查询到

缓存目录下又存在两个目录:content-v2index-v5content-v2 目录用于存储 tar包的缓存,而index-v5目录用于存储tar包的 hashnpm 在执行安装时,可以根据 package-lock.json 中存储的 integrity、version、name 生成一个唯一的 key 对应到 index-v5 目录下的缓存记录,从而找到 tar包的 hash,然后根据 hash 再去找缓存的 tar直接使用。

2.1、缓存管理

  • npm cache add:官方解释说这个命令主要是 npm 内部使用,但是也可以用来手动给一个指定的 package 添加缓存。
  • npm cache clean:删除缓存目录下的所有数据,为了保证缓存数据的完整性,需要加上 --force 参数。
  • npm cache verify:验证缓存数据的有效性和完整性,清理垃圾数据。

3、npm ci

npm ci 可以自动删除 node_modules 目录,无法安装单个依赖,且不会改变 package-lock.json 文件,但执行时 package-lock.json 必须存在且版本号与 package.json 要求一致,如果 package.json 中不存在依赖 A 或者依赖 A 版本和 lock 中不兼容,npm ci 就会报错

相对于 npm install 好处,我的理解是:不会主动更新版本,保持依赖在原有可掌握的范围内,这将大大保持所有开发者的统一性。一般情况下,使用npm install足够了,但是要是对依赖版本要求很严格的话,就使用npm ci

4、疑难解答

4.1、90%依赖报错解决方法?

rm -rf node_modules && npm cache clean --force && npm i

4.2、package.json被修改的原因?

  1. 新增或者删除了一些包,但是没有及时 install,比如 a 同学给 package.json 添加了一个 package,但是没有执行 npm install,代码被 push 上去后,b 同学执行 npm i,就会发现 lockfiles 被更改了
  2. 挪动了包的位置,将部分包的位置从 dependencies 移动到 devDependencies这种操作,虽然包未变,但是也会影响 lockfiles,会将部分包的 dev 字段设置为 true
  3. registry 的影响,经过实际使用发现,如果我们 node_modules 文件夹下的包中下载时的的 registry 与 lockfiles 中包即使 version 相同,但是registry是不同,执行 npm i 时也会修改。

4.3、yarn.lock被修改的原因?

  1. 当package.json变化
  2. package.json中的包版本与yarn.lock中的版本不同
  3. 执行yarn add重新安装依赖
  4. 执行yarn upgrade更新所有依赖

 4.4、如何区分版本号呢?

 有童鞋对 版本号中的 ~ ^ 可能傻傻分不清,那林大大就分享下我自己的理解吧,~ 中文名叫波浪号,浪在海边,而海一般都在外面海边,所以是用来限定最后一位的,而 ^  是方向向上指向天空的,可以理解为 中天,所以用来限定中间那位的。位置记好后,再来记一下,这俩符号 都是 代表 大于等于 这个数字,所以是不是就理解到不会忘了呢~

~1.1.1 范围是 [1.1.1, 1.2.0)

^1.1.1 范围是 [1.1.1, 2.0.0)

------有不懂的可以相互讨论交流噢~我有错误的话,请指出噢~------文章来源地址https://www.toymoban.com/news/detail-829133.html


到了这里,关于npm install 相关过程及分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序安装vant组件库过程(利用node.js中的npm)

    最近学完机器学习,闲着无事学一下小程序,安装vant组件库的前提是要拥有一个node.js(npm在其中),下载完node.js之后,在微信小程序的项目文件中输入命令行安装即可 node.js官网安装地址点击这里  点击Other Downloads  下载windows64位  打开下载之后的安装包 注意:这一步之前

    2024年02月10日
    浏览(69)
  • 深入解析npm ERR! cwebp-bin@6.1.2 postinstall: `node lib/install.js`错误及解决方案

    在开发过程中,我们经常会遇到各种各样的错误。其中,npm ERR! cwebp-bin@6.1.2 postinstall: node lib/install.js 是一个比较常见的错误。本文将详细介绍这个错误的产生原因以及解决方案。 首先,我们需要了解这个错误的含义。npm ERR! cwebp-bin@6.1.2 postinstall: node lib/install.js 表示在安装

    2024年02月02日
    浏览(107)
  • node.js+NPM包管理器+Webpack打包工具+前端项目搭建

    javascript运行环境(无需依赖html文件) BFF,服务于前端的后端 官网下载安装,node -v查看是否安装成功 ①、创建一个01.js文件 ②、通过CMD命令执行(或者通过工具的集成终端) node 01.js 如果出现权限原因,可以通过管理员方式打开工具 ③、通过浏览器访问http://127.0.0.1:8888 如

    2024年02月07日
    浏览(73)
  • 前端笔记10——Win7下node.js和npm版本兼容性问题解决。

    新版本node.js不支持WIN7。 Win7的电脑只能支持到Node v13.14.0。 可能之前装了新版本的node,删了重装后,导致运行npm命令老是提醒信息,说是不支持node版本。 npm does not support Node.js v13.14.0 可是显示版本正常 解决方法: 卸载node之后,在把npm和npm cache两个文件夹删掉。 删干净后再

    2024年02月15日
    浏览(62)
  • 「NodeJs进阶」超全面的 Node.js 性能优化相关知识梳理

    相信对于前端同学而言,我们去开发一个自己的简单后端程序可以借助很多的nodeJs的框架去进行快速搭建,但是从前端面向后端之后,我们会在很多方面会稍显的有些陌生,比如「性能分析」,「性能测试」,「内存管理」,「内存查看」,「使用C++插件」,「子进程」,「

    2024年02月01日
    浏览(54)
  • 【从0配置JAVA项目相关环境2】node.js + 前端 从配置到运行

    实验室电脑,需要跑一个前后端分离的JAVA项目,于是开始重新配置 全部(数据库+后端+前端)配置环境+修改代码 耗时6h,包括遇到各种坑,但总体而言弯路走的不多 如果跟着这篇博客走,理论上会避开我遇到的那些坑hh 对于前端开发者来说,我们也没有遗漏。文章将详细介

    2024年02月04日
    浏览(42)
  • 前端JS代码中Object类型数据的相关知识

    获取Object类型数据的方式有两种: 方括号获取: Object[\\\"arg1\\\"] 点·获取: Object.arg1 前端遍历Object类型数据的方式 遍历JavaScript中的对象有几种方法,包括使用for…in循环、Object.keys()方法、Object.values()方法和Object.entries()方法。以下是每种方法的示例代码: Object对象中的日期类型

    2024年01月20日
    浏览(63)
  • npm install时 node-sass npm ERR command failed问题解决

    出现错误后,找了很多方法,网上关于这个问题的解决方法也很多,尝试了两三天,最后发现了一个终极解决方案, 亲测有效!!! ,下面是链接。 npm install 时 node-sass npm ERR command failed问题解决

    2024年02月15日
    浏览(55)
  • 解决npm install安装node-sass包容易失败的问题

     具体问题如下: 2、问题分析 npm版本过高 3、问题解决 npm install npm@6.14.10 -g 如果还提示出现 python 的信息,说明还需要安装python,去python官网下载对应版本的安装包安装即可,一般是2.7版本。python官网下载 如果提示 这些等乱七八糟的基本上就是node-sass 版本冲突问题 直接去

    2024年04月13日
    浏览(60)
  • Node基础--npm相关内容

    下面,我们一起来看看Node中的至关重要的一个知识点-----npm 1.npm 概述    npm( Node Package Manager ),CommonJS 包规范是理论, npm是其中一种实践 。 对于Node而言,NPM帮助其完成了第三方模块的发布、安装和依赖等。借助npm,Node与第三方模块之间形成了很好的一个 生态系统。(类似

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包