Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【笔记】项目开发过程中的依赖模块升级--yarn resolution #3

Open
holylovelqq opened this issue Jul 18, 2019 · 2 comments

Comments

@holylovelqq
Copy link
Owner

本笔记是基于yarn resolution的使用

以下摘自yarn中文官网

你为什么要这么做?

  • 有些时候,项目会依赖一个不常更新的包,但这个包又依赖另一个需要立即升级的包。 这时候,如果这个(不常更新的)包的依赖列表里不包含需要升级的包的新版本,那就只能等待作者升级,没别的办法。
  • 项目的子依赖(依赖的依赖)需要紧急安全更新,来不及等待直接依赖更新。
  • 项目的直接依赖还可以正常工作但已经停止维护,这时子依赖需要更新。 同时,你清楚子依赖的更新不会影响现有系统,但是又不想通过 fork 的方式来升级直接依赖。
  • 项目的直接依赖定义了过于宽泛的子依赖版本范围,恰巧这其中的某个版本有问题,这时你想要把子依赖限制在某些正常工作的版本范围里。

上面说的很详细,基本把各种情况都列出来了,下面用白话复述一遍

  1. 背景:当项目中的某个依赖模块需要升级时(重大bug,安全隐患等原因)
  2. 直接依赖模块部分:直接修改pakage.json内的版本,然后yarn install
  3. 间接依赖模块部分:存在其他插件也依赖该模块,此时,其他插件内的依赖版本也应该相应升级,这个时候就会出现上面的各种情况,不管是什么情况,最终目的都是为了更新该模块,要么更新依赖该模块的插件,要么更新该模块,基于项目情况自己判定,接下来肯定是要讲更新该模块的情况。

使用方法yarn中文官网也有介绍,但是还是要在下面简单的记录一下

  1. 为了达到验证目的,此处应该先进行一次验证
  2. package.json 内添加以下内容(以lodash为例)
      "resolutions": {
        "lodash": ">=4.17.12"
      },
  3. 执行yarn或者yarn install 命令
  4. package.json 内添加的内容删除

验证方法

  • 运行下记的yarn audit 命令,确认结果中没有出现lodash
$ yarn audit | grep lodash
  • 为了证明此验证方法是否有效,可以在升级之前,先验证一次

关于yarn audit 命令在yarn中文官网上没有进行翻译(2019/07/18),建议参考英文官网的介绍

@holylovelqq holylovelqq changed the title 【笔记】项目开发过程中的依赖更新 【笔记】项目开发过程中的依赖模块升级--yarn resolution Jul 18, 2019
@holylovelqq
Copy link
Owner Author

对于笔记中临时处理有问题的依赖版本,只是记述了yarn,下面总结其他包管理工具的处置方法:

  1. cnpm 有一个 bug-versions 仓库,收集了各个知名项目有问题的版本号,这样即使当前最新版是有问题的,用户在使用 cnpm 安装依赖时,也可以避开这个版本,直接安装到最近一个确保可用的版本;
  2. yarn 支持在 package.json中通过 resolutions 字段指定某个依赖的版本号,用户可以对间接依赖的版本有更精确的控制。比如题主碰到的问题就可以通过在 package.json中添加以下内容并重新运行 yarn解决:"resolutions": {
    "lodash": ">=4.17.12"
    },
  3. npm 有 npm-force-resolutions 实现相同功能;
  4. pnpm 有 hooks 机制解决类似问题。

@holylovelqq
Copy link
Owner Author

fsevents低版本与node12不兼容的问题,修复方法为强制升级fsevents的版本
参见此issue nodejs/node#27389 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant