Angular 8中的core-js有什么用?

时间:2019-07-04 17:25:01

标签: angular angular-cli angular-devkit

我已经将Angular项目的版本从7更新到了8。一切运行顺利,原理图已完成(也许),并且我们还可以(项目甚至还在生产中)。当我们更新angular-cli时,我们总是生成一个新项目,以查看实际差异并从中学习,例如新的依赖项,配置等。

当使用angular-cli 8.0.4生成新的Angular项目时,新应用没有 core-js 作为依赖项:

"dependencies": {
    "@angular/animations": "~8.0.1",
    "@angular/common": "~8.0.1",
    "@angular/compiler": "~8.0.1",
    "@angular/core": "~8.0.1",
    "@angular/forms": "~8.0.1",
    "@angular/platform-browser": "~8.0.1",
    "@angular/platform-browser-dynamic": "~8.0.1",
    "@angular/router": "~8.0.1",
    "rxjs": "~6.4.0",
    "tslib": "^1.9.0",
    "zone.js": "~0.9.1"
  }

在构建项目 core-js 上没有分析包... Bundle without core-js 在我的 older 项目中,有使用angular-cli core-js 更新的项目,并且存在于最终软件包中。

"dependencies": {
    "@angular/animations": "~8.0.3",
    "@angular/cdk": "~8.0.1",
    "@angular/common": "~8.0.3",
    "@angular/compiler": "~8.0.3",
    "@angular/core": "~8.0.3",
    "@angular/forms": "~8.0.3",
    "@angular/platform-browser": "~8.0.3",
    "@angular/platform-browser-dynamic": "~8.0.3",
    "@angular/router": "~8.0.3",
    "@auth0/angular-jwt": "2.1.1",
    "@hackages/ngxerrors": "~8.0.0",
    "@ng-bootstrap/ng-bootstrap": "5.0.0-rc.1",
    "@ngx-loading-bar/core": "~4.2.0",
    "@ngx-loading-bar/http-client": "~4.2.0",
    "@nicky-lenaers/ngx-scroll-to": "~2.0.0",
    "@swimlane/ngx-charts": "~12.0.1",
    "bootstrap": "~4.3.1",
    "core-js": "~2.6.9",
    "d3-scale": "~3.0.0",
    "d3-shape": "~1.3.5",
    "date-fns": "2.0.0-beta.2",
    "ngx-perfect-scrollbar": "~8.0.0",
    "ngx-toastr": "~10.0.4",
    "rxjs": "~6.5.2",
    "tslib": "~1.10.0",
    "xlsx": "~0.14.3",
    "zone.js": "~0.9.1"
  }

core-js present in final bundle

为什么这是行为?删除core-js作为依赖关系是否安全?更新原理图会丢失吗?在最新项目上安装npm依赖项时,我从core-js获取了安装后消息,但未在软件包描述中明确显示。

2 个答案:

答案 0 :(得分:17)

如果您在Angular 7或更早版本的项目中浏览src/polyfills.ts,将会看到一堆注释和注释掉的导入语句,这些注释使您可以通过取消注释来添加各种浏览器的polyfill-大多数来自核心.js。

在Angular 8中,随着Differential Loading的出现,CLI将根据您在browserslist文件和tsconfig文件中的要求构建2个捆绑软件-一个带有和不带有polyfill的捆绑软件。

>

Angular CLI在部署的构建过程中为您处理差异加载。 ng build命令会根据您的浏览器支持要求和编译目标,生成用于差异加载的必要捆绑软件。

ng8中core-js的不同之处在于,由于CLI正在处理polyfill,因此core-js是CLI的依赖项。因此,即使在升级到ng8的过程中卸载了core-js,您仍会看到它仍位于node_modules文件夹中,但是您不必管理安装的版本。

在将项目和CLI升级到angular 8之后,建议您这样做:

  1. 在新生成的ng8项目中,将polyfills.ts的内容替换为同一文件的内容
  2. 从您的项目中卸载core-js。

现在您可以构建项目,并且CLI可以处理polyfills。

答案 1 :(得分:1)

根据this文章。

  

请注意,core-js已更新至v3,现在可以由CLI本身直接处理,因此不再需要它作为应用程序的依赖项。