Angular 不再需要核心js了吗?

Angular 不再需要核心js了吗?,angular,angular-cli,angular8,Angular,Angular Cli,Angular8,我已经将Angular项目从版本7更新到了版本8。一切运行顺利,原理图完成了它的工作(也许),我们还可以(项目甚至在生产中)。当我们更新Angular CLI时,我们总是生成一个新项目来查看真正的差异,并从中学习新的依赖项、配置等 使用Angular CLI 8.0.4生成新的Angular项目时,新应用程序没有core js作为依赖项: "dependencies": { "@angular/animations": "~8.0.1", "@angular/common": "

我已经将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"
  }
在构建项目
核心js上分析捆绑包不存在:
在我以前的项目中,使用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"
  }

为什么会有这种行为?作为依赖项删除
核心js
安全吗?更新示意图是否缺少此项?在最新项目上安装
npm
依赖项时,我从
core js
获得安装后消息,但它没有明确显示在包描述中

根据文章

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


如果您在Angular 7或更早版本的项目中查看
src/polyfills.ts
,您将看到一堆注释和注释掉的导入语句,这些语句允许您通过取消注释为各种浏览器添加polyfills,大多数来自core.js

在Angular 8中,随着的出现,CLI将根据您在
browserslist
文件和tsconfig文件中的要求构建2个捆绑包—一个包含PolyFill,另一个不包含PolyFill

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

ng8中与core js的区别在于,由于CLI处理多填充,core js是CLI的依赖项。因此,即使在升级到ng8的过程中卸载core js,您也会看到它仍然位于node_modules文件夹中,但您不必管理安装的版本

将项目和CLI升级到angular 8后,我建议您执行以下操作:

  • 将polyfills.ts的内容替换为新生成的ng8项目中相同文件的内容
  • 从项目中卸载core js

  • 现在,您可以构建项目,CLI会处理polyfills。

    是的,如果它有效的话<代码>错误错误:未捕获(承诺):TypeError:对象不支持属性或方法“包含”
    @Endrju polyfills仍然被添加,但是,正如我在回答中提到的,您需要确保您的browserslist文件设置为包含您想要支持的浏览器,以便它们得到polyfilled是的,我已经仔细检查过了,我仍然在IE11中得到错误@Endrju也许你可以发布一个问题,这样我们可以更完整地了解这个问题。这是关键:“在新生成的ng8项目中,用相同文件的内容替换polyfills.ts的内容”工作得非常好-我从Angular 10项目复制了polyfills.ts文件,它的工作方式就像charmIs
    core js
    core.js
    在上图中突出显示相同?@h0b0,非常有用,很高兴知道,谢谢!对于较旧版本的common.js,您仍然需要手动添加es7 polyfills,因为这些不是由CI添加的。但是使用Angular 10.0.4,您不再需要这样做,因为common.js不再按语言版本分隔多边形填充。