关于服务:错误:无法解析“”中的“ core-js / es7 / reflect” ode_modules @ angular-devkit uild-angularsrcangular-cli-filesmodels

Error: Can't resolve 'core-js/es7/reflect' in '\node_modules\@angular-devkit\build-angular\src\angular-cli-files\models

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

enter image description here

ERROR in
./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js
Module not found: Error: Can't resolve 'core-js/es7/reflect' in
'\
ode_modules@angular-devkit\\build-angular\\src\\angular-cli-files\\models'

这是我的package.json依赖项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
{
 "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"
  }
}


您应该安装包含此文件/模块的[email protected]。请参阅预设环境文档。


如果您想使用3.0版,则可以在tsconfig.json文件中添加一个路径。

1
2
3
4
5
6
7
8
9
10
{
   "compilerOptions": {
        ...
       "paths": {
           "core-js/es7/reflect": [
               "node_modules/core-js/proposals/reflect-metadata"
            ]
        }
    }
}

注意:您需要检查node_modules/core-js/proposals/reflect-metadata相对路径,并在项目结构中根据需要对其进行更正。


对于Angular 8(来源):

Angular CLI 8.0+ manages the required Angular polyfills directly and projects will not require a direct dependency on core-js (assuming an application does not manually include additional core-js polyfills).

我已解决:

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


core-js 3.0版具有一些重大更改:

https://github.com/zloirock/core-js/blob/master/docs/2019-03-19-core-js-3-babel-and-a-look-into-the-future.md

您应该在其中一个文件中找到与此行类似的行:import"core-js/es7/reflect";

更改为此:import"core-js/proposals/reflect-metadata";


@medeni的tsconfig.json解决方案可以工作,但在自己检查之前不要复制路径。对我来说,必须是:

1
2
3
"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


就我而言,我只是换了->

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

1
2
import 'core-js/es/reflect';
import 'core-js/es/reflect';

而且有效。


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

1
2
3
/** 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更新,并且一切正常。


'core-js/es/reflect'一样删除路径中'es'末尾的数字也对我有用。

对于EX:import 'core-js/es7/reflect';更改为import 'core-js/es/reflect';


我找到了可能的答案。您有core-js版本3.0,此版本没有用于ES6和ES7的单独文件夹;这就是应用程序找不到正确路径的原因。

要解决此错误,您可以将core-js版本降级为2.5.7。此版本产生正确的目录结构,带有单独的ES6和ES7文件夹。

要降级版本,只需运行:


对于Angular 7

从package.json中删除:

1
"core-js":"3.6.5",

因为它是Angular软件包的一部分。


对于最新版本(当前为-> 9),

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

步骤1)删除节点模块。

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

步骤3)npm安装

那么它将很好地工作