Angular6升级至8运行ng serve/ng build报Must use import to load ES Module错误
问题根因
你的项目中@ngtools/webpack包与@angular/compiler-cli包版本不匹配:
- 你安装的
@angular/compiler-cli版本过高,已经采用ES Module规范,package.json中自带"type": "module"声明,所有.js文件默认按ES模块处理 - 你当前使用的
@ngtools/webpack版本是适配Angular 8的旧版本,仅支持CommonJS规范,用require()语法加载依赖,无法加载ES模块
解决方案
按以下顺序操作即可修复:
- 首先删除项目根目录下的
node_modules文件夹、package-lock.json文件、yarn.lock文件(如果有) - 检查package.json中的依赖版本,保证所有Angular相关包的版本完全对齐Angular 8的正式版本,核心依赖版本参考:
注意:绝对不要混用跨大版本的Angular生态包,Angular 8对应的所有官方生态包大版本都应该是8.x,不能出现9.x及以上版本的Angular相关依赖{ "@angular/compiler-cli": "~8.2.14", "@ngtools/webpack": "~8.3.29", "@angular-devkit/build-angular": "~0.803.29" } - 不要在项目根目录的package.json中添加
"type": "module"配置,Angular 8的构建工具链完全基于CommonJS规范,添加该配置会导致更多兼容问题 - 重新执行依赖安装命令:
npm install - 完成后重新执行
ng serve或ng build验证
如果以上操作后还报错,执行npm ls @angular/compiler-cli检查是否有依赖嵌套安装了高版本的@angular/compiler-cli,如果有,在package.json中添加resolutions字段强制锁定版本即可:
{ "resolutions": { "@angular/compiler-cli": "~8.2.14" } }
使用npm的话需要额外安装npm-force-resolutions包执行预安装,使用yarn直接生效。
内容的提问来源于stack exchange,提问作者Luis pineda
相关产品推荐
相关产品推荐

