Like cache-loader, but files are invalidated by contenthash, rather than mtime. webpack 4 only.
[![npm][npm]][npm-url]
[![node][node]][node-url]
[![test][test]][test-url]
Caches the result of following loaders on disk
cache-loader is excellent for development mode. However, it may have reduced in peformance in continuous integration environments due to:
- Git checkouts assigning arbitrary timestamps to source files
- npm/yarn installation assigning arbitrary timestamps node_modules files
- Cache restoration assigning arbitrary timestamps to node_modules file
ci-cache-loader works around these problems by:
- Tracking cached files by hash instead of last modified time
- Tracking npm dependencies by package version instead of last modified time
No. cache-loader is much better at reacting to development environment changes. This loader assumes that:
- node_modules is an unmodified version of code installed via npm/yarn (i.e., no patches, or modification by build scripts)
- All source code is untouched during webpack compilation
- thread-loader isn't used (CI servers tend to restrict thread counts anyway)
``sh`
yarn
Add this loader in front of other (expensive) loaders to cache the result on disk.
webpack.config.js
`js`
module.exports = {
module: {
rules: [
{
test: /\.ext$/,
use: ['@shopify/ci-cache-loader', ...loaders],
include: path.resolve('src'),
},
],
},
};
> ⚠️ Note that there is an overhead for saving the reading and saving the cache file, so only use this loader to cache expensive loaders.
| Name | Type | Default | Description |
| --------------------- | ------------------------------------------------ | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| cacheKey | {Function(options, request) -> {String}} | undefined | Allows you to override default cache key generator |cacheDirectory
| | {String} | path.resolve('.cache-loader') | Provide a cache directory where cache items should be stored (used for default read/write implementation) |cacheIdentifier
| | {String} | cache-loader:{version} {process.env.NODE_ENV} | Provide an invalidation identifier which is used to generate the hashes. You can use it for extra dependencies of loaders (used for default read/write implementation) |write
| | {Function(cacheKey, data, callback) -> {void}} | undefined | Allows you to override default write cache data to file (e.g. Redis, memcached) |read
| | {Function(cacheKey, callback) -> {void}} | undefined` | Allows you to override default read cache data from file |
[npm]: https://img.shields.io/npm/v/@shopify/ci-cache-loader.svg
[npm-url]: https://npmjs.com/package/@shopify/ci-cache-loader
[node]: https://img.shields.io/node/v/@shopify/ci-cache-loader.svg
[node-url]: https://nodejs.org