为了避免ngcc每次重新编译,我需要在CI作业中缓存什么?

时间:2020-03-04 22:54:32

标签: angular continuous-integration circleci angular9 angular-ivy

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

例如

Compiling @angular/core : es2015 as esm2015

Compiling @angular/common : es2015 as esm2015

...

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

为避免在每次构建中使用ngcc重新编译所有模块,我应该缓存什么路径?

3 个答案:

答案 0 :(得分:0)

<块引用>

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 to

# 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

答案 1 :(得分:0)

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

答案 2 :(得分: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. 如果不再引用该包,将被删除