diff --git a/.changeset/fast-ads-tease.md b/.changeset/fast-ads-tease.md new file mode 100644 index 000000000..1d5c50604 --- /dev/null +++ b/.changeset/fast-ads-tease.md @@ -0,0 +1,9 @@ +--- +'sku': patch +--- + +Enable `babel-loader` cache + +Sku's webpack configuration now emits a `babel-loader` cache to `node_modules/.cache/babel-loader`. +This cache can speed up local development in situations where the webpack cache is invalidated. +It can also be used during production builds to speed up the build process. diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index acc431cd0..95c999b82 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -52,6 +52,14 @@ jobs: path: ${{ steps.set-puppeteer-cache.outputs.PUPPETEER_CACHE_DIR }} key: puppeteer-${{ runner.os }}-${{ hashFiles('./pnpm-lock.yaml') }} + - name: Cache babel-loader + id: babel-loader-cache + uses: actions/cache@v3 + with: + path: 'fixtures/*/node_modules/.cache/babel-loader' + key: babel-loader-${{ runner.os }}-${{ hashFiles('./pnpm-lock.yaml') }} + restore-keys: babel-loader-${{ runner.os }}- + - name: Install Puppeteer if: steps.puppeteer-cache.outputs.cache-hit != 'true' run: pnpm puppeteer browsers install chrome diff --git a/packages/sku/config/babel/babelConfig.js b/packages/sku/config/babel/babelConfig.js index a484af74f..fd71d1e44 100644 --- a/packages/sku/config/babel/babelConfig.js +++ b/packages/sku/config/babel/babelConfig.js @@ -94,6 +94,13 @@ module.exports = ({ return { babelrc: false, sourceType: isBrowser ? 'unambiguous' : 'module', + // `babel-jest` does not support the `cacheDirectory` option. + // It is only used by `babel-loader`. + ...(!isJest + ? { + cacheDirectory: true, + } + : {}), presets, plugins, }; diff --git a/packages/sku/config/webpack/webpack.config.js b/packages/sku/config/webpack/webpack.config.js index 52693ff92..8f34dbbaf 100644 --- a/packages/sku/config/webpack/webpack.config.js +++ b/packages/sku/config/webpack/webpack.config.js @@ -176,6 +176,7 @@ const makeWebpackConfig = ({ loader: require.resolve('babel-loader'), options: { babelrc: false, + cacheDirectory: true, presets: [ [ require.resolve('@babel/preset-env'), diff --git a/packages/sku/config/webpack/webpack.config.ssr.js b/packages/sku/config/webpack/webpack.config.ssr.js index 3a18cc8f2..82731f6cd 100644 --- a/packages/sku/config/webpack/webpack.config.ssr.js +++ b/packages/sku/config/webpack/webpack.config.ssr.js @@ -138,6 +138,7 @@ const makeWebpackConfig = ({ loader: require.resolve('babel-loader'), options: { babelrc: false, + cacheDirectory: true, presets: [ [ require.resolve('@babel/preset-env'),