美文网首页前端交流圈
npm install之后发生了什么——npm安装机制

npm install之后发生了什么——npm安装机制

作者: lulu_c | 来源:发表于2021-10-19 11:57 被阅读0次

    启动项目我们一般第一个执行的命令就是安装依赖包 npm install 。那么这个过程具体的执行流程是怎么样的呢?

    安装流程

    流程图

    1.npm install执行后,会检查并获取npm配置,优先级为

    项目级别的.npmrc文件 > 用户级别的.npmrc文件 > 全局的.npmrc文件 > npm内置的.npmrc文件

    查看配置命令npm config ls -l

    2.然后检查项目中是否有package-lock.json文件。

    • 如果有,检查package-lock.json和package.json中声明的依赖是否一致

      • 一致:直接使用 package-lock.json 中声明的依赖,从缓存或者网络中加载依赖
      • 不一致:各个版本的npm处理方式:


        image.png
    • 如果没有,根据package.json递归构建依赖树,然后根据依赖树下载完整的依赖资源,在下载时会检查是否有相关的资源缓存

      • 存在:将缓存资源解压到node_modules中
      • 不存在:从远程仓库下载资源包,并校验完整性,并添加到缓存,同时解压到node_modules中

    最后生成package-lock.json文件。

    构建依赖树时,不管是直接依赖还是子依赖,都会按照扁平化的原则,优先将其放置在node_modules根目录中(最新的npm规范),在这个过程中,如果遇到相同的模块,会检查已放置在依赖树中的模块是否符合新模块的版本范围,如果符合,则跳过,不符合,则在当前模块的node_modules下放置新模块

    npm安装依赖时,会下载到缓存当中,然后解压到项目的node_modules中。
    再次安装依赖的时候,会根据package-lock.json中存储的 integrity、version、name 信息生成一个唯一的 key,然后拿着key去目录中查找对应的缓存记录,如果有缓存资源,就会找到tar包的hash值,根据 hash 再去找缓存的 tar 包,并把对应的二进制文件解压到相应的项目 node_modules 下面,省去了网络下载资源的开销。

    // 获取缓存位置
    npm config get cache
    // C:\Users\DB\AppData\Roaming\npm-cache
    
    // 清除缓存
    npm cache clean --force
    

    另外_cacache 文件夹中不包含全局安装的包,所以想清除存在问题的包为全局安装包时,需用 npm uninstall -g <package>解决

    参考资料:https://blog.csdn.net/h03580/article/details/116021091?spm=1001.2014.3001.5501

    相关文章

      网友评论

        本文标题:npm install之后发生了什么——npm安装机制

        本文链接:https://www.haomeiwen.com/subject/cufaoltx.html