BrowserslistError: Unknown version 67 of android

BrowserslistError: Unknown version 67 of android

我使用 angular 8 and CLI 8 创建了一个 angular 库。我正在尝试构建库,但出现错误。

ng build <lib-name>

我已经查看了一些与此错误相关的问题,其中大多数说删除 node_modules 并重新安装。我尝试了此解决方案,但仍然收到以下错误。

[浏览器列表] 无法解析 package.json。忽略它。

ERROR: Unknown version 67 of android
Unknown version 67 of android
BrowserslistError: Unknown version 67 of android
        at Function.select (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\ng-packagr\node_modules\autoprefixer\node_modules\browserslist\index.js:924:17)
        at C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\ng-packagr\node_modules\autoprefixer\node_modules\browserslist\index.js:252:33
        at Array.reduce (<anonymous>)
        at resolve (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\ng-packagr\node_modules\autoprefixer\node_modules\browserslist\index.js:234:18)
        at browserslist (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\ng-packagr\node_modules\autoprefixer\node_modules\browserslist\index.js:353:16)
        at Browsers.parse (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\ng-packagr\node_modules\autoprefixer\lib\browsers.js:66:12)
        at new Browsers (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\ng-packagr\node_modules\autoprefixer\lib\browsers.js:48:26)
        at loadPrefixes (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\ng-packagr\node_modules\autoprefixer\lib\autoprefixer.js:101:20)
        at plugin (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\ng-packagr\node_modules\autoprefixer\lib\autoprefixer.js:112:20)
        at LazyResult.run (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\postcss\lib\lazy-result.js:295:14)
        at LazyResult.sync (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\postcss\lib\lazy-result.js:281:26)
        at LazyResult.warnings (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\postcss\lib\lazy-result.js:85:17)
        at StylesheetProcessor.process (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\ng-packagr\lib\ng-v5\entry-point\resources\stylesheet-processor.js:47:16)
        at Object.readResource (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\ng-packagr\lib\ts\cache-compiler-host.js:73:57)
        at TsCompilerAotCompilerTypeCheckHostAdapter.loadResource (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\@angular\compiler-cli\src\transformers\compiler_host.js:495:37)
        at Object.get (C:\Users\kaukhare\github\ngx-group-by-alphabates\node_modules\@angular\compiler\bundles\compiler.umd.js:26490:94)

可能是什么问题?此错误是由于 autoprefixer 引起的吗?我应该怎么做才能解决这个问题?

包-lock.json

"ng-packagr": {
      "version": "5.5.1",
      "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-5.5.1.tgz",
      "integrity": "sha512-GT6QK5WAirQwALdeJPiXdgRd5PzRqcknb/C/G+cCDEbUFri4oGVmns2Nl4I0FGg/cRn6nXTxRiUunOSqZ3Lehw==",
      "dev": true,
      "requires": {
        "ajv": "^6.10.2",
        "autoprefixer": "^9.6.0",
        "browserslist": "^4.0.0"
},
    "autoprefixer": {
      "version": "9.5.1",
      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz",
      "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==",
      "dev": true,
      "requires": {
        "browserslist": "^4.5.4",
        "caniuse-lite": "^1.0.30000957",
        "normalize-range": "^0.1.2",
        "num2fraction": "^1.2.2",
        "postcss": "^7.0.14",
        "postcss-value-parser": "^3.3.1"
      }

我也看到了...像你一样,删除 node_modules 并重新 运行 npm install 无效。

然而,起作用的是删除 node_modules 和删除 package-lock.json,然后 运行 npm i.

试试看...

安德鲁

我更新了所有 npm 包,错误消失了。

尝试修改 \node_modules\ng-packagr\node_modules\autoprefixer\node_modules\browserslist\index.js924 如下:

if (alias) {
      version = alias
    } else if (context.ignoreUnknownVersions) {
      return []
    } else {
      throw new BrowserslistError(
        'Unknown version ' + version + ' of ' + name)
    }

if (alias) {
      version = alias
    } else if (context.ignoreUnknownVersions) {
      return []
    } else {
      return []
    }

我希望能帮助你...这是肮脏的解决方案...

试试这个:

1.Deleting 整个 node_modules 目录。

2.Deleting package-lock.json 从根目录.

3.Making 确保在 package.json:

中引用了最新的 @angular-devkit 项目

"@angular-devkit/build-angular": "^0.801.3", "@angular-devkit/build-ng-packagr": "^0.801.3".

4.Close 并重新打开 cmd window.

运行 npm 安装。

为我解决的是 运行

npx browserslist --update-db

在项目根目录中。这对 package-lock.json 更新版本 caniuse-lite 进行了更改。

为了提供一些背景信息,我遇到了这个问题,因为我遇到了这个错误:

Compiling TypeScript sources through ngc
ERROR: Unknown version 80 of android
An unhandled exception occurred: Unknown version 80 of android

在我将 angular 从 9.x.x 升级到 10.x.x 之后。 我在我的开发机器和 CI 中都遇到了这个错误,所以删除 node_modulespackage-lock.json 并不是一个真正的选择。

可能是由过时的 babel 引起的。尝试使用 npx babel-upgrade --write 然后 npx browserslist@latest --update-db.

更新 babel

这可能为时已晚,但我会 post 我是如何解决这个问题的,因为我 运行 最近(2022 年 2 月下旬)进入了这个问题,并且我遵循了不同的方法对我的项目造成最小更改的方法。
我在从 StackBlitz 下载的项目中遇到了类似的问题,但在我的例子中,android 的未知版本是 97,而不是 67 或 80。
browserslist 数据库是最新的,删除了 node_modules 目录和 运行 npm install 没有改变任何东西(使用比较工具检查),更新项目的依赖关系导致甚至更麻烦,删除 package-lock.json.

也是如此

在我的案例中有效的是在项目根目录的 .browserslistrc 中指定 98 作为 android 的目标版本(而不是 97)(我实际上必须创建该文件,因为它不存在)。

这就是我发现 98 版有效的方式:
我先临时编辑了异常发生的代码(在node_modules\browserslist\index.js)。在抛出异常的行之前,我插入了这条语句:

if (name === 'android') {
  return arguments.callee(context, name, (version - 1).toString())
}

找到接受的小于 97 的最大数字。然后我 运行 npx browserslist 发现那个版本是 4.
不满意,我通过用这个替换上面的片段来尝试更大的版本号:

if (name === 'android' && Number(version) < 200) {
  return arguments.callee(context, name, (Number(version) + 1).toString())
}

幸运的是,98 成功了(运行 npx browserslist 再次验证)。
所以我撤消了对代码的更改,从 npx browserslist 中获取了输出,并将其保存在 .browserslistrc 中(由于另一个错误,我还不得不排除 safari)。
ng build 命令随后成功执行。