Angular 5项目执行ng test、ng build报错,ng serve正常求助
ng test/ng build报错"Cannot find name 'Element'"的问题 嘿,我之前帮别人解决过完全一样的问题!这个报错本质是TypeScript在构建或测试模式下找不到DOM相关的全局类型(比如Element),而ng serve的开发环境可能默认帮你处理了这个配置,所以没出问题。下面几个方案按顺序试,基本能搞定:
检查并更新根目录
tsconfig.json的lib配置
打开项目根目录的tsconfig.json,找到compilerOptions里的lib数组,确保它包含"dom"选项。这个配置是告诉TypeScript要包含哪些全局类型库,缺了dom就识别不了Element这类DOM对象。修改后大概是这样:"compilerOptions": { // 其他已有的配置... "lib": [ "es2017", "dom" ] }保存后重新运行
ng test或ng build试试。确认CDK版本和Angular 5兼容
Angular的版本和CDK版本必须严格匹配!Angular 5对应的CDK版本应该是5.x.x,如果你的CDK装成了6+的高版本,就会出现类型不兼容的问题。
打开package.json查看@angular/cdk的版本,如果不是5开头,执行以下命令降级到兼容版本:npm install @angular/cdk@5.2.5 --save(5.2.5是Angular 5对应的稳定CDK版本,同大版本的其他小版本也可以)
检查测试专用配置
tsconfig.spec.json
如果只有ng test报错,那还要看看src目录下的tsconfig.spec.json——这是测试环境单独用的TypeScript配置,同样要确保compilerOptions.lib里包含"dom",配置方式和根目录的tsconfig.json一致。清理缓存重新安装依赖
有时候依赖缓存会导致奇怪的类型问题,试试彻底清理后重装:rm -rf node_modules rm package-lock.json npm cache clean --force npm install完成后再执行构建或测试命令。
内容的提问来源于stack exchange,提问作者Carlos Vázquez Losada

