Angular 6项目报错:找不到Map/Set等类型及相关技术问题咨询
搞定Angular 6项目里的警告和报错!
我来帮你逐个解决这些问题,都是Angular 6升级或配置时常见的坑:
一、先处理System.import()的弃用警告
这个警告是因为Webpack 4+已经把System.import()给弃用了,现在要用标准的动态import()语法。看报错路径是来自@angular/core的源码,但大概率是你的项目里src/vendors.ts文件里的引用方式有问题:
- 打开
vendors.ts检查,如果里面有用System.import引入Angular相关模块的地方,直接换成静态import声明,或者改成import()动态导入的格式。 - 如果是升级过来的项目,建议清理依赖后重装,避免旧缓存搞事情:
rm -rf node_modules package-lock.json npm install
另外要确保你的Angular CLI版本是6.x的,和Angular 6.0.3匹配,版本不兼容也可能出这种奇怪的警告。
二、解决一堆找不到Map/Set/Promise的错误
这些报错本质是TypeScript编译器没加载ES6的内置类型定义,改下tsconfig.json就行:
- 打开项目根目录的
tsconfig.json - 在
compilerOptions里找到lib数组(没有就新增),把es2015和dom加进去:"compilerOptions": { // 其他配置... "lib": [ "es2015", "dom" ] }
es2015包含了Map、Set、Promise这些ES6自带的类型,dom则提供浏览器环境的类型定义,加完就不会报找不到这些名称的错了。
三、消除装饰器的实验性支持警告
Angular全靠装饰器(比如@Component、@NgModule)干活,TypeScript默认没开这个功能,得手动在tsconfig.json里开启:
在compilerOptions里加上这两行:
"compilerOptions": { // 其他配置... "experimentalDecorators": true, "emitDecoratorMetadata": true }
加完就不会再弹这个警告了。
四、最后补几个检查项
- TypeScript版本要匹配:Angular 6.x要求TypeScript在
2.7.x到2.9.x之间,你写的2.x范围太宽,建议在package.json里锁死版本,比如"typescript": "~2.7.2",然后重装依赖。 @types/core-js别用太高版本:Angular 6还适配的是core-js 2.x,如果你装了@types/core-js@3.x可能会冲突,建议降级到2.x版本,比如@types/core-js@2.5.11。
做完这些改动,重启ng serve,所有报错和警告应该就都消失啦!
内容的提问来源于stack exchange,提问作者C0ZEN
相关产品推荐
相关产品推荐

