错误:在“\node_modules\@angular-devkit\build-angular\src\angular-cli-files\models”中无法解析“core-js/es7/reflect”。

91

更新到Angular 7.3.6后,在ng serve上出现以下错误:

enter image description here

在以下路径中: ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js 发生错误: 找不到模块:Error: Can't resolve 'core-js/es7/reflect' 请注意,该路径为: '\node_modules@angular-devkit\build-angular\src\angular-cli-files\models'
这是我的package.json依赖项:
{
  "name": "frontend",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build --prod",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^7.2.11",
    "@angular/cdk": "^7.3.6",
    "@angular/common": "^7.2.11",
    "@angular/compiler": "^7.2.11",
    "@angular/core": "^7.2.11",
    "@angular/flex-layout": "^7.0.0-beta.24",
    "@angular/forms": "^7.2.11",
    "@angular/http": "^7.2.11",
    "@angular/material": "^7.3.6",
    "@angular/platform-browser": "^7.2.11",
    "@angular/platform-browser-dynamic": "^7.2.11",
    "@angular/router": "^7.2.11",
    "adm-zip": "^0.4.13",
    "core-js": "^2.6.5",
    "hammerjs": "^2.0.8",
    "rxjs": "^6.4.0",
    "rxjs-compat": "^6.0.0-rc.0",
    "tslib": "^1.9.3",
    "zone.js": "^0.9.0"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.13.7",
    "@angular/cli": "^7.3.7",
    "@angular/compiler-cli": "^7.2.11",
    "@angular/language-service": "^7.2.11",
    "@types/jasmine": "~3.3.12",
    "@types/jasminewd2": "~2.0.6",
    "@types/node": "~11.12.0",
    "codelyzer": "^5.0.0",
    "jasmine-core": "~3.3.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "^4.0.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "^2.0.5",
    "karma-jasmine": "~2.0.1",
    "karma-jasmine-html-reporter": "^1.4.0",
    "protractor": "^6.0.0",
    "ts-node": "~8.0.3",
    "tslint": "~5.14.0",
    "typescript": "3.1.6"
  }
}

是的,我尝试了,但是仍然出现相同的错误,我不知道还能做什么。你有其他建议吗? - Bronsii
1
你应该安装core-js@2.5.x - nircraft
是的,它起作用了!谢谢你。 - Bronsii
遇到了同样的问题!但感谢 @nircraft,它也为我解决了。 - Abhijit Srivastava
2
截至2019年7月3日,使用Angular-CLI 8.0.6和Angular 8.1.0,由于/src/polyfills.ts中的有问题的导入不再生成,因此上述错误将不会在新生成的Angular应用程序中发生。对于旧的Angular应用程序,我建议通过以下方式生成临时Angular应用程序:ng new aaTemplate --skip-tests --skip-install将新生成的aaTemplate\src\polyfills.ts与您的旧应用程序的polyfills.ts进行比较,您就会明白我在说什么了。 - user3785010
显示剩余4条评论
12个回答

111
你应该安装包含此文件/模块的 core-js@2.5.x。请参见预设环境文档

但请注意,这是一个非常旧的版本,已知存在问题并且不受支持。从模块本身来看:

"core-js@<3.23.3 不再维护,由于存在大量问题因此不建议使用。由于 V8 引擎的任性,即使没有任何多余的 polyfill 填充,旧版 core-js 的功能检测也可能导致减速高达 100 倍。一些版本存在与 web 兼容性相关的问题。请升级你的依赖到实际版本的 core-js。"

请考虑使用以下更好的解决方案之一。


43
"npm install --save core-js@^2.5.0",对我有帮助,谢谢。 - Jeremy Thille
1
我也可以运行! - Abhijit Srivastava
1
我将 package.json 中的版本降低到 "core-js": "^2.5.4",然后运行 yarn,这对我起作用了。 - Sami-L
1
工作了!!谢谢。 - SudarP
2
确认 npm install --save core-js@^2.5.0 对我也起作用了 - iamtravisw
显示剩余2条评论

40

如果您想使用版本3.0,您可以将路径添加到您的tsconfig.json文件中。

{
    "compilerOptions": {
        ...
        "paths": {
            "core-js/es7/reflect": [
                "node_modules/core-js/proposals/reflect-metadata"
            ]
        }
    }
}
注意:您需要检查node_modules/core-js/proposals/reflect-metadata的相对路径,并在必要时更正您的项目结构。

嗨,我在 GitHub 的错误报告中也看到了这个问题,但是我还没有成功解决它,仍然遇到了相同的“找不到模块”的错误:“Error: Can't resolve 'core-js/es7/reflect'”……你的代码可以正常工作吗? - Camilo Casadiego
6
对于我的情况,这段代码的作用是将 "core-js/proposals/reflect-metadata" 文件映射到 "core-js/es7/reflect" 路径下,并将所有 "core-js/es6/" 目录下的文件映射到 "core-js/es/" 目录下。 - mrapi
运行了 ncu 命令,将所有的包更新到最新版本,然后使用上述命令,这对我很有效。 - user9366125
我不得不添加"baseUrl": "."才能使其工作。感谢mrapi和Medeni Baykal。 - Cedric Arnould

33

针对 Angular 8 (来源):

Angular CLI 8.0+ 直接管理所需的 Angular polyfills,项目将不需要直接依赖 core-js(假设应用程序没有手动包含额外的 core-js polyfills)。

我解决了这个问题:

  • 从我的 package.json 依赖中删除 core-js
  • 从我的 test.ts 中删除 import 'core-js/es7/reflect';

4
对于类似的问题,这个方法是有效的,但我需要从我的 polyfills.ts 文件中移除对 core-js/es{6,7}/reflect 的引用。 - beetstra

28

1
这对我非常有效 - 在升级到Angular 8之后出现了错误,但您的解决方案起作用了。 - Timothy Louw
2
这个答案对我来说(Angular 11)是解决方案中最好的一个。谢谢,@Joffrey。 - Wellspring

24

在我的情况下,我只是改变了 -->

import 'core-js/es6/reflect';
import 'core-js/es7/reflect';

import 'core-js/es/reflect';

它起作用了...


6

移除路径中以'es'结尾的数字,例如'core-js/es/reflect',对我也起到了作用。

例如:import 'core-js/es7/reflect';已更改为import 'core-js/es/reflect';


你能再解释一下吗? - Dieter Meemken
嗨,Dieter,问题在于你正在错误的文件夹中寻找“reflect”模块。 1- 打开你的src文件夹中的“polyfills.ts”。2- 找到一行类似于“import 'core-js/es7/reflect';” 的代码。这里是7,但在你的情况下可能是其他数字。3- 去掉数字7,变成这样:“import 'core-js/es/reflect';”,然后它应该就能正常工作了。 - David1er

4

对于最新版本的 Angular(目前为 9),

兼容的 core-js 版本是 "core-js": "~2.5.0"

步骤 1)删除 Node 模块。

步骤 2)在 package.json 文件中,在 dependecies 对象中写入 "core-js": "~2.5.0"。

步骤 3)运行 npm install 命令。

然后它将完美地工作。


4

来自@medeni的tsconfig.json解决方案有效,但在复制路径之前,请先进行检查。对我而言,路径是这样的:

"paths": {
  "core-js/es7/reflect": ["../node_modules/@angular-devkit/build-angular/node_modules/core-js/proposals/reflect-metadata"]
}

../是因为tsconfig.json被src/tsconfig.app.json或者src/tsconfig.spec.json扩展了,所以/src是工作目录。

注意:我正在使用Angular CLI 8.1.0


4

我通过在polyfills.ts文件中添加以下导入来修复了它:import 'core-js/proposals/reflect-metadata';

/** Evergreen browsers require these. **/
// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
import 'core-js/proposals/reflect-metadata';

确保您已经更新了最新的 core-js,这样一切都应该能够正常工作。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接