浏览器列表错误:未知的安卓版本67

52

我使用 angular 8 和 CLI 8 创建了一个 Angular 库。 我试图构建该库,但出现了错误。

ng build <lib-name>

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

[Browserslist] 无法解析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引起的吗?我该怎么解决这个问题?

package-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"
      }
8个回答

148

对我有用的解决方法是运行

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并不是一个可行的选择。


8
这个答案解决了Angular更新后的相同问题。很好! - blackhard
2
这应该是正确的答案。对我有效。 - Jeonsoft FaceBundy
@ihor,我也遇到了我的库的确切问题。但是这个解决方案不起作用。我仍然收到相同版本67的Android错误。请帮忙。 - Tanzeel
1
这也解决了我在升级到Angular 13时遇到的问题,谢谢。我还遇到了一个错误,当我使用shrinkwrap而不是package lock运行npx browserslist时。如果其他人遇到此错误,请尝试运行npx browserslist@latest --update-db - ciantrius
这解决了我从Angular 14升级到15的问题 - undefined
显示剩余4条评论

12

我也遇到了这个问题……像你一样,删除 node_modules 并重新运行 npm install 也无效。

不过,有效的方法是删除 node_modules 以及 package-lock.json 文件,然后运行 npm i。

可以试试这种方法……

安德鲁


1
尝试过了。但是问题依旧。 - Kaustubh Khare
2
我还得确保在我的 package.json 文件中使用了最新的 @angular-devkit..."@angular-devkit/build-angular": "^0.801.3", "@angular-devkit/build-ng-packagr": "^0.801.3",一旦我解决了这个问题并清除了 node_modules,它就可以正常工作了。 - user1543276
也尝试了这个。但是问题依旧。 - Kaustubh Khare
@KaustubhKhare,我也遇到了同样的问题。你是怎么解决这个错误的?请帮帮我吧。我已经卡在这里4天了。 - Tanzeel
@Tanzeel 接受的答案就是这个。在更改后,您是否遇到本地机器上的问题?更新 browserslist 后,您是否尝试过删除 node_modules - Kaustubh Khare
这对我也起作用了,升级Angular后,但由于我使用的是yarn,所以我不得不删除yarn.lock。谢谢! - adam0101

3
可能已经晚了,但我会发布如何解决这个问题的方法,因为我最近遇到了同样的问题(2022年2月下旬),我采用不同的方法来尽可能减少对我的项目所做的更改。
我从StackBlitz下载的一个项目也遇到了类似的问题,但在我的情况下,未知版本的android是97,而不是67或80。
browserslist数据库已经更新,删除node_modules目录并运行npm install没有改变任何内容(通过使用比较工具进行检查),更新项目的依赖项引起了更多麻烦,删除package-lock.json也是如此。
在我的情况下有效的方法是,在项目根目录的.browserslistrc中将android的目标版本指定为98(而不是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命令成功执行。


2

尝试以下步骤:

1.删除整个node_modules目录。

2.从根目录中删除package-lock.json文件。

3.确保在package.json文件中引用了最新的@angular-devkit项目:

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

4.关闭并重新打开cmd窗口。

运行npm install命令。


@kaustubh-khare 你是否更改了package.json文件,使用我上面提到的版本?你使用的是哪个版本的Angular和Angular-cli? - Ruthi
是的,我已经尝试过了。如果您检查所有的答案和评论,那么您会发现您的解决方案已经被提到了。 - Kaustubh Khare

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

更新所有的npm包后,尝试再次运行 "npm install",也许可以帮助将一些 ^-版本的包更新到最新。 - iwhp

1
可以是由于 babel 版本过旧引起的。尝试使用 npx babel-upgrade --write 更新 babel,然后再运行 npx browserslist@latest --update-db

0

简而言之,你的 .browserslistrc 条目可能无效,或者突然被一些包不理解。尝试删除/替换它们。

我在安装 Angular 项目上的 @angular-architects/module-federation 后遇到了这个问题。我的现有 .browserslistrc 是:

> 0.5%
last 2 versions
Firefox ESR
not dead
not IE 9-11 # For IE 9-11 support, remove 'not'.

一些奇怪的事情发生了,就在上述软件包安装后,出现了以下错误: 我只是注释掉了我的 .browserslistrc 条目,就解决了这个问题。 不知道为什么软件包的安装会导致这个问题。

-7

尝试修改 \node_modules\ng-packagr\node_modules\autoprefixer\node_modules\browserslist\index.js 的第924行如下:

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 []
    }

希望能帮到你...这只是一个不太优雅的解决方案...


这个可行。我能否从某个地方传递 ignoreUnknownVersions : true 参数? - Kaustubh Khare
请问您能否添加一些上下文和解释,以说明该解决方案实际上是做什么的,以及为什么这将是一个有效的解决方案? - Michael Kargl
这个方法可行。但是-4个踩是一个大红旗。这是我唯一的解决方案,但这很糟糕。该怎么办。 :-( - Tanzeel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接