zoukankan      html  css  js  c++  java
  • yarn or npm 版本固化如何选择

    转自:https://www.cnblogs.com/pqjwyn/p/11163146.html

    https://zhuanlan.zhihu.com/p/211407232

    yarn.lock与包版本管理

    目前项目中依赖的版本管理问题。项目中使用 yarn 作为包管理器,安装依赖时会生成 yarn.lock 文件并且会提交到代码仓库,那它的作用是什么呢?

    yarn.lock 文件的生成:yarn.lock 文件是在安装依赖时自动生成的。使用 yarn cli 执行添加/删除/升级依赖时会自动更新。

    yarn.lock 文件内容:

    "@babel/core@^7.11.6":
      version "7.11.6"
      resolved "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.11.6.tgz?cache=0&sync_timestamp=1599146828594&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651"
      integrity sha1-OpRV3HOH/xusRXcGULwTugShVlE=
      dependencies:
        "@babel/code-frame" "^7.10.4"
        "@babel/generator" "^7.11.6"
        "@babel/helper-module-transforms" "^7.11.0"
        "@babel/helpers" "^7.10.4"
        "@babel/parser" "^7.11.5"
        "@babel/template" "^7.10.4"
        "@babel/traverse" "^7.11.5"
        "@babel/types" "^7.11.5"
        convert-source-map "^1.7.0"
        debug "^4.1.0"
        gensync "^1.0.0-beta.1"
        json5 "^2.1.2"
        lodash "^4.17.19"
        resolve "^1.3.2"
        semver "^5.4.1"
        source-map "^0.5.0"
    

      当我们在命令行中执行 yarn add @babel/core -D 时,默认会安装 @babel/core 的最新版本,同时 yarn.lock 文件会更新,截取文件的一部分来看一下 yarn.lock 文件中储存了些什么。

            1.第一行:包名 + 语义化版本,来自 package.json 文件

             2.version:所安装的包版本,是 exact 的

             3.resolved:包的安装地址。这里因为重置了 registry,所以指向了淘宝的镜像源

             4.integrity:hash 值

              5.dependencies:当前包依赖

    那么 yarn.lock 就存储了所有依赖项及依赖项的依赖项确切的安装信息。在 package.json 版本不变, yarn.lock 文件存在的情况下执行 yarn install 命令就会按照文件中存储的依赖信息进行安装,从而保证在不同机器上安装的包都是一样的。

    具体的:

    // package.json
    "dependencies": {
       "@babel/core": "^7.11.6"
    }
    // yarn.lock
    @babel/core@^7.11.6:
       version: 7.11.6

    package.json 文件中指定了 @babel/core 的版本是 ^7.11.6,假设 @babel/core 有了新的版本 7.11.7,如果没有 yarn.lock 文件,那么安装的时候会安装符合版本范围的最新版本 7.11.7,那么即使在项目代码完全一致的情况下,安装的依赖版本也是不同的,可能会造成某些不一致问题。

    在 yarn.lock 文件存在的情况下,安装时会匹配 package.json 和 yarn.lock 中包的版本,二者一致,则判断是否存在缓存。存在缓存,copy 包内容;不存在,根据 yarn.lock 中的 resolved 字段去下载。最终下载 7.11.6 版本,各个机器上下载的包是一致的。

    如何更新包版本

    方法一:

    修改 package.json 中的包版本号,执行 yarn install,此时版本与 yarn.lock 中版本不匹配,则会去下载符合版本范围的最新包,并更新 yarn.lock 文件

    方法二:

    yarn upgrade 相关命令

  • 相关阅读:
    Tempter of the Bone 搜索---奇偶性剪枝
    uestc 1709 Binary Operations 位运算的灵活运用
    uestc 1072 a ^ b
    uestc Another LCIS
    武汉邀请赛 Key Logger 双向链表
    bnu 29378 Adidas vs Adivon 基础题
    中南月赛F ZZY and his little friends
    日期问题
    开灯问题
    开灯问题
  • 原文地址:https://www.cnblogs.com/cjr001/p/14416397.html
Copyright © 2011-2022 走看看