diff --git a/TODO.md b/TODO.md index d7f6d90..838940e 100644 --- a/TODO.md +++ b/TODO.md @@ -30,7 +30,7 @@ - [ ] add building to publish process ... - [ ] @babel/register@7.18.x has a bug - [ ] `$flecks/db/sequelize` should be `$flecks/db.sequelize` -- [ ] `url()` in styles breaks HMR +- [x] `url()` in styles breaks HMR # Next # Webpack 5 diff --git a/packages/core/src/server/flecks.js b/packages/core/src/server/flecks.js index 7463574..05723aa 100644 --- a/packages/core/src/server/flecks.js +++ b/packages/core/src/server/flecks.js @@ -575,6 +575,7 @@ export default class ServerFlecks extends Flecks { debugSilly('%s runtime de-externalized %s, alias: %s', runtime, fleck, alias); }); // Set up compilation at each root. + const compiledPaths = []; Array.from(new Set( needCompilation .map(([fleck]) => fleck) @@ -584,6 +585,8 @@ export default class ServerFlecks extends Flecks { const resolved = dirname(R.resolve(join(root, 'package.json'))); const sourcepath = this.constructor.sourcepath(resolved); const sourceroot = join(sourcepath, '..'); + compiledPaths.push(sourceroot); + // @todo Ideally the fleck's 3rd party modules would be externalized. // Alias this compiled fleck's `node_modules` to the root `node_modules`. config.resolve.alias[join(sourceroot, 'node_modules')] = join(FLECKS_CORE_ROOT, 'node_modules'); const configFile = this.buildConfig('babel.config.js'); @@ -611,6 +614,24 @@ export default class ServerFlecks extends Flecks { }, ); }); + const compiledPathsRegex = new RegExp( + `(?:${compiledPaths.map((path) => path.replace(/[\\/]/g, '[\\/]')).join('|')})`, + ); + if (!config.optimization) { + config.optimization = {}; + } + if (!config.optimization.splitChunks) { + config.optimization.splitChunks = {}; + } + if (!config.optimization.splitChunks.cacheGroups) { + config.optimization.splitChunks.cacheGroups = {}; + } + config.optimization.splitChunks.cacheGroups.flecksCompiled = { + chunks: 'all', + enforce: true, + priority: 100, + test: compiledPathsRegex, + }; } }