• 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 相关命令

  • 相关阅读:
    WP7 操作XML文件
    C#和C/C++指针实现swap交换
    感受
    我学到了什么 我思考了什么.
    hdu 2768 Cat vs. Dog (最大独立)
    hdu 1960 Taxi Cab Scheme (最小覆盖)
    hdu 1528 Card Game Cheater (最小覆盖)
    hdu 4160 Dolls (最大独立)
    hdu 2458 Kindergarten (最大独立集)
    hdu 2119 Matrix (最小覆盖)
  • 原文地址:https://www.cnblogs.com/cjr001/p/14416397.html
Copyright © 2020-2023  润新知