zoukankan      html  css  js  c++  java
  • 前端Leader你应该知道的NPM包管理机制

    npm install 命令

    首先总结下npm 安装一个模块包的常用命令。

    /* 模块依赖会写入 dependencies 节点 */
    
    npm install moduleName
    
    npm install -save moduleName
    
    npm install -S moduleName 
    
    /* 模块依赖会写入 devDependencies 节点 */
    
    npm install -save-dev moduleName
    
    npm install -D moduleName
    
    /* 全局安装模块包 */
    
    npm install -g moduleName
    
    /* 安装特定版本的包 */
    
    npm install 包名@版本号
    
    /* 通过地址安装git仓库 */
    
    npm install git+https://github.com/itwmike/axios.git
    
    npm install git+ssh://git@github.com:itwmike/axios.git
     
    /* 安装特定分支或Tag的git仓库 */
    
    npm install git+https://github.com/itwmike/axios.git#tag
    
    /* 通过用户名安装git仓库 */ 
    
    npm install github:帐号/仓库名 # npm install github:itwmike/axios
    
    npm install github:帐号/仓库名
    

      

    npm 依赖包版本号

    npm 所有node包都使用语义化版本号,规则要求如下:  

    • 每个版本号都形如1.2.3,由三个部分组成,依次叫做“主版本号(major)”、“次版本号(minor)”和“修订号(patch)” 。

    • 当新版本无法兼容基于前一版本的代码时,则提高主版本号 。

    • 当新版本新增了功能与特性,但仍兼容前一版本的代码时,则提高次版本号 。

    • 当新版本仅仅修正漏洞或者增强效率,仍然兼容前一版本代码,则提高修订号。

    默认使用 npm install -save 下载的都是最新版本,同时会在package.json 文件中登记一个最优版本号,如下形式:

    "dependencies": {
      "axios": "^0.19.0"
    },
    

      

    最优版本号前面会多出一个“标记”,这个标记有啥意义?它的写法又有哪些?

    npm install 都做了哪些事?

    拿到一个node项目时首要做法是运行 npm install 命令,这个命令将 package.json 文件中的依赖包自动解析并安装,这也是项目能够本地运行的前置条件。那如此简单的一条命令,npm 背后又做了哪些不为人知的事呢?

    Number One

    自 npm 5.0后,项目中如果没有 package-lock.json 文件的时候,npm 会自动帮我们生成。该文件的主要作用是记录依赖包之间的具体版本号,对包版本有一个锁定的意义,项目开发中应该将此文件上传到git等版本控制工具(博主为此经历了血淋淋的惨痛教育)。

    Number Two

    检测本地包是否已经下载。如果本地 node_modules 下已经存在和 package-lock.json 中版本一致的包,则不会重新下载。

    Number Three

    下载依赖节点中对应的模板包。下载规则是:如果 package-lock.json 文件存在,则按照该文件中记录的版本号下载对应的模块包;如果文件不存在或文件中没有该包的记录,此时会按照版本号的标记(上面已讲)规范下载并同时更新到 package-lock.json。

    了解了 package-lock.json 的作用后,笔者有个疑问:手动修改 package.json 中的包版本号后运行 npm install 命令会下载新包么?

    带着这个疑问,笔者做了实验,得出如下结论:

    • 如果新旧版本号差距较大,比如从 ^2.5.2 变为 2.6.0 ,那么会下载最新包并且更新 package-lock.json 。

    • 如果新旧版本号差距较小,比如从 ^2.5.2 变为 2.5.4,那么不会更新。

    总之是否更新要看特定情况,取决于 package.json中版本号的标记和 package-lock.json 是否一致。

    cnpm install 探索

    cnpm 是淘宝 npm 镜像,在国内很受欢迎,虽然笔者并不喜欢使用。那 cnpm 和 npm 对包的管理是否一样呢?

    • cnpm install 并不会生成 package-lock.json

    • cnpm install 并不受 package-lock.json 的约束,它会按照版本号标记规则下载依赖包

    由此可见,我们在项目中使用 cnpm 的时候一定要慎重,因为很可能团队成员每个人使用的依赖包版本都不相同,造成打包后的结果也不同。

    如果团队要使用 cnpm,请使用固定版本号的方式安装依赖包如:cnpm install -E moduleName

    本文转载自:https://www.limitcode.com/detail/5dcc035f10dcbf0b1852b35d.html

  • 相关阅读:
    金山词霸注册表怎么删
    新手学习jquery
    《企业应用架构模式》(POEAA)读书笔记
    Silverlight 4 tools
    asp.net非常基础的面试题
    VS 2010 中文版正式版无法安装Silverlight4 Tools的解决办法
    OnPreRender(EventArgs e) 事件常用的方法
    各大搜索引擎网站登录入口
    向用户控件传递参数的问题
    URLRewriter
  • 原文地址:https://www.cnblogs.com/limitcode/p/11875403.html
Copyright © 2011-2022 走看看