Angular 8库构建报错:BrowserslistError: Unknown version 67 of android
问题原因分析
从你给出的错误日志和依赖信息来看,这个问题的核心是**browserslist版本不支持Android 67这个浏览器版本号**,同时还伴随package.json解析失败的警告——这大概率是配置格式问题或依赖冲突导致的解析异常。
是否由autoprefixer导致?
是的,但属于间接原因。autoprefixer本身需要依赖browserslist来确定需要兼容的浏览器范围,而你当前使用的autoprefixer@9.5.1依赖的是browserslist@^4.5.4——这个版本的browserslist还未收录Android 67的版本信息,当autoprefixer调用它处理浏览器兼容规则时,就会抛出“Unknown version 67 of android”的错误。
具体解决步骤
我整理了几个可行的解决方案,你可以按顺序尝试:
1. 先修复package.json的解析问题
首先排查你的package.json是否存在语法错误(比如遗漏逗号、引号不匹配、格式错乱),这是导致[Browserslist] Could not parse package.json警告的常见原因。你可以直接用编辑器的语法检查功能,或者通过npx jsonlint package.json命令来校验并修复。
2. 强制升级browserslist版本
由于你的ng-packagr@5.5.1依赖的autoprefixer版本锁定了browserslist的范围,你可以通过npm的overrides字段(npm 8+支持)或者yarn的resolutions字段,强制指定一个支持Android 67的browserslist版本(比如4.16.6,这个版本已经收录了Android 67的信息)。
在package.json中添加以下配置:
"overrides": { "ng-packagr": { "autoprefixer": { "browserslist": "4.16.6" } } }
然后执行以下命令重新安装依赖:
rm -rf node_modules package-lock.json npm install
3. 调整browserslist的兼容配置
检查项目根目录的.browserslistrc文件,或者package.json中的browserslist字段,看是否直接指定了android 67这类具体版本。如果有的话,将其修改为browserslist支持的范围表达式,比如:
last 2 Android versions > 1% in your-region
或者更通用的配置:
last 2 versions > 1% not dead
4. 升级ng-packagr到兼容的小版本
Angular 8对应的ng-packagr最新小版本是5.7.1,这个版本的依赖链中,autoprefixer和browserslist的版本已经更新,能够兼容更高版本的Android浏览器。你可以修改package.json中的ng-packagr版本为^5.7.1,然后重新安装依赖。
内容的提问来源于stack exchange,提问作者Kaustubh Khare

