What do I need to cache in my CI job to avoid ngcc recompiling each time?
UPDATE 1:
Hard coded Ivy entry
points have been Removed from the angular build if you are using latest, it was previously & wrongly hardcoded
inside Angular init TS github code link
Now/latest you can just do
ngcc --properties es2015 browser module main
For older versions only, please see Update 1 for newer versions
ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points
Or as par of you build inside package.json
{ "scripts": { "postinstall": "ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points" }}
Some ref configure Travis to
# custom caching for .travis.ymlinstall:- npm ci# keep the npm cache around to speed up installscache: directories: - "$HOME/.npm"# you can add other
Option 2:Much faster with yarn or pnpm
pnpm install// oryarn install// ornpm install --prefer-offline --no-audit
In short, you can't do that. Current version of ngcc doesn't check for any changes and always recompile all packages upon calling ngcc command. This case can be resolved in future with angular linker but it's not certain, for sure it will improve build times.
Retain package-lock.json
and folder node_modules/
between each runs. I hope you are NOT running build on brand new image every time.
If package.json
or package-lock.json
gets updated in next CI build, only the updated ones will be pre-processed and installed. Others will not be installed again and again.
There are various do's and dont's guidelines around package-lock.json and node_modules folder. You will find a lot to read about it on the internet and I am not going to get involved
Thumb rule: Keep
package-lock.json
andnode_modules
together
Basically a package gets installed (mentioned in package.json) if
- There is no entry in package-lock.json
- Updated version is available than the one entered into package-lock.json
- Package will be removed if its not referred any more