从Angular 11.2升级到12.2构建报错:(0 , _identifier.getUndoPath) 不是函数
报错根因说明
报错信息中出现styles.css属于Angular样式编译的正常表现:Angular处理.scss源文件时会先将其编译为中间态CSS产物,报错指向的是编译后的临时产物路径,不是你项目中的实际源文件,所以找不到本地styles.css是正常的。具体触发报错的原因如下:
- postcss版本不兼容:该报错触发的核心原因是
getUndoPath是postcss@8.3.0及以上版本才提供的API,Angular12默认依赖postcss@8+版本,但你的项目中可能存在旧版本postcss被其他依赖锁死、或者多个postcss版本共存的情况,导致API调用失败 - 升级残留缓存:ng CLI升级后.angular目录下的旧编译缓存没有清空,缓存中还保留着Angular11版本的样式编译逻辑,和新版本的依赖不匹配
- 依赖版本冲突:项目中其他和样式处理相关的第三方依赖(比如自定义webpack插件、css预处理器工具)没有同步升级到兼容Angular12的版本,拉取了低版本postcss覆盖了CLI默认的依赖版本
解决方案
- 第一步清空本地缓存与旧依赖文件,执行命令:
类Unix系统:rm -rf node_modules package-lock.json yarn.lock .angular
Windows系统:手动删除node_modules、package-lock.json、yarn.lock文件以及.angular缓存文件夹 - 第二步手动安装匹配Angular12的postcss相关依赖,执行命令:
npm install postcss@^8.4.0 postcss-scss@^4.0.0 --save-dev
若使用yarn包管理器,替换为yarn add postcss@^8.4.0 postcss-scss@^4.0.0 -D - 第三步检查angular.json配置中对应项目的build配置项,确认styles数组中仅存在你的实际.scss样式入口,示例正确配置如下:
"architect": {
"build": {
"options": {
"styles": [
"src/styles.scss"
]
}
}
}
- 第四步重新安装全量依赖:执行
npm install或者yarn install - 第五步执行构建命令验证:
ng build,报错即可解决
内容的提问来源于stack exchange,提问作者Lee Warner
相关产品推荐
相关产品推荐

