美文网首页
20,npm install机制。why

20,npm install机制。why

作者: r8HZGEmq | 来源:发表于2019-11-19 11:37 被阅读0次

    1,安装机制

    console.log("npm模块安装机制")
    1,发出npm install命令
    2,查询node_modules
      2_1:存在,跳过
      2_2:不存在,向注册中心查询模块地址,下载后存放在更目录.npm,解压到node_modules
    
    

    2,实现原理

    一般会经历6个大的阶段:
    1,预安装。2,确定首层依赖模块。3,获取模块。4,模块扁平化。5,安装模块。6,执行工程生命周期
    
    1,工程中若定义了preinstall钩子,则执行
    2,首层依赖:dependencies、devDependencies。npm开启多进程在每个首层模块逐步找更深节点
    3,递归获取模块:
      3-1,获取模块信息如package.json^1.1.0语义化版本范围的分析(具体见底部补充👇),npm会取1.x.x形式的最新版本信息url等。
      3-2,上一步会拿到resolved字段也就是模块的地址,npm检查缓存决定是否需要下载
      3-3,查找该模块是否还有依赖,有则递归到第一步。没有则停止
    4,扁平化。npm3加入了去重过程。
      4-1,如果foo和bar依赖lodash@^1.0.0和^1.1.0,则只保留兼容版本1.1.0。
      4-2,如果foo和bar依赖lodash@^1.1.0和^2.0.0,则1.1.0下载到node_modules中,2.0.0继续留在依赖树中。
    5,按照声明周期(preinstall、install、postinstall),安装模块,更新node_modules
    6,如果工程定义了钩子,则被执行。(顺序install、postinstall、prepublish、prepare)。最后更新版本描述文件。
    
    
    
    

    补充小点:语义化版SemVer。举例领会[major, minor, patch]

    console.log("语义化版SemVer")
    波浪线(~)范围
    ~1.2.3  <=> [1.2.3, 1.3.0)
    ~1.2  <=> [1.2.0, 1.3.0)
    ~1  <=> [1.0.0, 2.0.0)
    ~0.2.3  <=> [0.2.3, 0.3.0)
    ~0.2  <=> [0.2.0, 0.3.0)
    ~0  <=> [0.0.0, 1.0.0)
    // 补注号(^)范围 最左不为0+1,右变0
    ^1.2.3  <=> [1.2.3, 2.0.0)
    ^0.2.3  <=> [0.2.3, 0.3.0)
    ^0.0.3  <=> [0.0.3, 0.0.4)
    ^1.2.3-beta.2  <=> [1.2.3-bta.2, 2.0.0)
    ^0.0.x <=> [0.0.0, 0.1.0)
    ^0.0 <=> [0.0.0, 0.1.0)
    ^1.x <=> [1.0.0, 2.0.0)
    ^0.x <=> [0.0.0, 1.0.0)
    

    补充小点:操作前 操作后 钩子。举例

    package.json
    // build前,将依赖包拷贝至当前项目下,build后,将生成的静态文件拷贝至apache服务下。
    "scripts": {
        ...
        "prebuild": "cp -rf /home/node_modules/* node_modules",
        "postbuild": "cp -rf dist/* /httpd/static/"
      }
    

    相关文章

      网友评论

          本文标题:20,npm install机制。why

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