Angular执行ng serve启动开发服务器报ERR_NO_ICU错误解决方案求助
错误原因
TypeError [ERR_NO_ICU]报错并非前端依赖版本冲突导致,根源是当前服务器安装的Node.js编译时未集成ICU(Unicode 国际化组件),而@angular-devkit/schematics依赖的TextDecoderAPI使用了只有带ICU版本的Node.js才支持的fatal参数,所以触发错误。
解决方案
方案一(推荐):更换带ICU的官方Node.js版本
Angular 9适配的Node.js版本范围为10.x ~ 12.x,直接安装对应版本的官方编译版Node.js即可:
- 先卸载当前系统内置的无ICU版本Node.js:
sudo apt remove nodejs -y && sudo apt autoremove -y - 通过nvm工具安装官方编译的Node.js 12.x版本,安装完成后执行
nvm use 12切换版本 - 验证ICU支持是否正常,执行以下命令输出ICU版本号即为修复成功:
node -p "process.versions.icu"
方案二(临时规避):手动修改依赖源码
如果暂时不能更换Node.js版本,可以直接修改报错的依赖文件临时解决:
- 打开报错指定的文件
/service/src/main/resources/static/node_modules/@angular-devkit/schematics/src/rules/template.js - 找到第27行初始化
TextDecoder的代码,删除{ fatal: true }参数,修改为new TextDecoder()即可 - 注意该修改为临时方案,重新执行
npm install后会被覆盖,需要重新修改
方案三:重新编译Node.js集成ICU
如果需要保留当前Node.js大版本,可以自行编译带ICU支持的版本:
- 先安装ICU开发依赖:
sudo apt install libicu-dev -y - 下载对应版本的Node.js源码,编译时添加
--with-intl=system-icu参数完成安装即可
额外优化建议
你当前package.json中@ngrx/schematics版本为^10.0.1,和其他Angular 9.x依赖的主版本不一致,修复Node.js问题后如果仍有其他报错,可以将@ngrx/schematics降级到9.x版本,保持依赖主版本统一。
内容的提问来源于stack exchange,提问作者אברגיל יעקובו
相关产品推荐
相关产品推荐

