2023-07-18 19:53:10 +03:00
|
|
|
function testPackageName(regexp: RegExp): (module: any) => boolean {
|
|
|
|
return (module: any) =>
|
|
|
|
module.nameForCondition && regexp.test(module.nameForCondition());
|
|
|
|
}
|
|
|
|
|
2023-08-29 13:07:05 +03:00
|
|
|
// https://hackernoon.com/the-100-correct-way-to-split-your-chunks-with-webpack-f8a9df5b7758
|
2023-07-18 19:53:10 +03:00
|
|
|
export const productionCacheGroups = {
|
|
|
|
asyncVendor: {
|
|
|
|
test: /[\\/]node_modules[\\/]/,
|
|
|
|
name(module: any) {
|
2023-08-29 13:07:05 +03:00
|
|
|
// monorepo linked in node_modules, so it's not a npm package
|
|
|
|
if (!module.context.includes('node_modules')) {
|
|
|
|
return `app-async`;
|
|
|
|
}
|
2023-07-30 09:34:52 +03:00
|
|
|
const name = module.context.match(
|
|
|
|
/[\\/]node_modules[\\/](.*?)([\\/]|$)/
|
|
|
|
)?.[1];
|
2023-07-19 10:19:27 +03:00
|
|
|
return `npm-async-${name}`;
|
2023-07-18 19:53:10 +03:00
|
|
|
},
|
|
|
|
priority: Number.MAX_SAFE_INTEGER,
|
|
|
|
chunks: 'async' as const,
|
|
|
|
},
|
|
|
|
blocksuite: {
|
|
|
|
name: `npm-blocksuite`,
|
|
|
|
test: testPackageName(/[\\/]node_modules[\\/](@blocksuite)[\\/]/),
|
|
|
|
priority: 200,
|
|
|
|
enforce: true,
|
|
|
|
},
|
|
|
|
react: {
|
|
|
|
name: `npm-react`,
|
|
|
|
test: testPackageName(
|
|
|
|
/[\\/]node_modules[\\/](react|react-dom|scheduler)[\\/]/
|
|
|
|
),
|
|
|
|
priority: 200,
|
|
|
|
enforce: true,
|
|
|
|
},
|
|
|
|
jotai: {
|
|
|
|
name: `npm-jotai`,
|
|
|
|
test: testPackageName(/[\\/]node_modules[\\/](jotai)[\\/]/),
|
|
|
|
priority: 200,
|
|
|
|
enforce: true,
|
|
|
|
},
|
|
|
|
rxjs: {
|
|
|
|
name: `npm-rxjs`,
|
|
|
|
test: testPackageName(/[\\/]node_modules[\\/]rxjs[\\/]/),
|
|
|
|
priority: 200,
|
|
|
|
enforce: true,
|
|
|
|
},
|
|
|
|
lodash: {
|
|
|
|
name: `npm-lodash`,
|
|
|
|
test: testPackageName(/[\\/]node_modules[\\/]lodash[\\/]/),
|
|
|
|
priority: 200,
|
|
|
|
enforce: true,
|
|
|
|
},
|
|
|
|
emotion: {
|
|
|
|
name: `npm-emotion`,
|
|
|
|
test: testPackageName(/[\\/]node_modules[\\/](@emotion)[\\/]/),
|
|
|
|
priority: 200,
|
|
|
|
enforce: true,
|
|
|
|
},
|
|
|
|
vendor: {
|
|
|
|
name: 'vendor',
|
|
|
|
test: /[\\/]node_modules[\\/]/,
|
|
|
|
priority: 190,
|
|
|
|
enforce: true,
|
|
|
|
},
|
|
|
|
styles: {
|
|
|
|
name: 'styles',
|
|
|
|
test: (module: any) =>
|
|
|
|
module.nameForCondition &&
|
|
|
|
/\.css$/.test(module.nameForCondition()) &&
|
|
|
|
!/^javascript/.test(module.type),
|
|
|
|
chunks: 'all' as const,
|
|
|
|
minSize: 1,
|
|
|
|
minChunks: 1,
|
|
|
|
reuseExistingChunk: true,
|
|
|
|
priority: 1000,
|
|
|
|
enforce: true,
|
|
|
|
},
|
|
|
|
};
|