47

有了 Angular 9 和它的新编译引擎 IVY,我的 CI 构建时间大大增加了。这当然是因为ngcc在许多模块上运行。

例如

Compiling @angular/core : es2015 as esm2015

Compiling @angular/common : es2015 as esm2015

...

我以为ngcc将已编译的库缓存在 中node_modules,但我node_modules的缓存在我的 CI 作业中,并且仍在进行编译,所以不可能。

我应该缓存什么路径以避免ngcc在每次构建时重新编译所有模块?

4

3 回答 3

2

更新 1:

如果您使用的是最新版本,则硬编码Ivy entry点已从角度构建中删除,它以前和wrongly hardcoded内部Angular init TS github code link

现在/最新你可以做

ngcc --properties es2015 browser module main



仅适用于旧版本,请参阅更新 1 了解较新版本

ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points

或者像你一样在里面建造package.json

{  
  "scripts": {    
    "postinstall": "ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points"
  }
}

一些参考将Travis 配置为

# custom caching for .travis.yml
install:
- npm ci
# keep the npm cache around to speed up installs
cache:
  directories:
  - "$HOME/.npm"
# you can add other 

选项 2:使用 yarn 或 pnpm 更快

pnpm install
// or
yarn install
// or
npm install --prefer-offline --no-audit
于 2021-02-02T23:02:02.707 回答
0

简而言之,你不能那样做。当前版本的 ngcc 不检查任何更改,并且总是在调用 ngcc 命令时重新编译所有包。这种情况可以在未来使用角度链接器解决,但不确定,肯定会缩短构建时间。

于 2021-05-05T10:41:04.090 回答
0

在每次运行之间保留package-lock.json和文件夹。node_modules/我希望你不是每次都在全新的图像上运行。

如果package.jsonpackage-lock.json在下一个 CI 构建中得到更新,则只有更新的会被预处理和安装。其他的不会一次又一次地安装。

围绕 package-lock.json 和 node_modules 文件夹有各种注意事项指南。你会在互联网上找到很多关于它的内容,我不会参与其中

拇指规则:保持package-lock.jsonnode_modules在一起

基本上安装了一个包(在 package.json 中提到)如果

  1. package-lock.json 中没有条目
  2. 更新版本比输入 package-lock.json 的版本可用
  3. 如果不再引用包将被删除
于 2021-08-02T21:02:29.597 回答