使用package.json文件里的resolutions,解决依赖版本问题导致的报错

2023-08-25 13:38:00 浏览数 (1)

一些时候,因为一些依赖依赖的依赖版本比较低,会导致一些莫名的问题,比如下面这个,编译时 @react-spring 的报错:

代码语言:javascript复制
Failed to compile.

./node_modules/@react-spring/web/dist/esm/index.js 113:11
Module parse failed: Unexpected token (113:11)
File was processed with these loaders:
 * ./node_modules/react-scripts/node_modules/babel-loader/lib/index.js
You may need an additional loader to handle the result of these loaders.
|       this.transforms = i;
|     }
>     _value = null;
|     get() {
|       return this._value || (this._value = this._get());

搜了一下,这个报错还是非常典型的,但是排查起来就非常头大,即使在 package.json 中指定了依赖版本也无济于事。

这时候可以派 resolutions 出厂,解决这个问题。需要注意的是, resolutions 需要搭配 yarn 使用。

resolutions 选择性依赖解决

package.json 中添加 resolutions 配置:

代码语言:javascript复制
{
  "name": "project",
  "version": "1.0.0",
  "dependencies": {
    "left-pad": "1.0.0",
    "c": "file:../c-1",
    "d2": "file:../d2-1"
  },
  "resolutions": {
    "@react-spring/web": "9.6.1"
  }
}

package.json 文件里的 resolutions 字段用于解析选择性版本,可以用来自定义依赖版本。

为什么使用 resolutions

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

这样就解决的编译时的依赖报错问题了。

本文关键词:依赖报错,依赖版本报错,Module parse failed: Unexpected token (113:11),编译时@react-spring报错

未经允许不得转载:w3h5-Web前端开发资源网 » 使用package.json文件里的resolutions,解决依赖版本问题导致的报错

0 人点赞