Commit cb5a0834 authored by Zhongjie Wu's avatar Zhongjie Wu Committed by 陈帅

Optimize asset chunking (#3650)

* Optimize asset chunking

* fix issues

* don't apply chunking on on non async assets
parent dd41c130
...@@ -75,10 +75,6 @@ export default { ...@@ -75,10 +75,6 @@ export default {
theme: { theme: {
'primary-color': primaryColor, 'primary-color': primaryColor,
}, },
externals: {
'@antv/data-set': 'DataSet',
bizcharts: 'BizCharts',
},
// proxy: { // proxy: {
// '/server/api/': { // '/server/api/': {
// target: 'https://preview.pro.ant.design/', // target: 'https://preview.pro.ant.design/',
......
...@@ -4,6 +4,25 @@ import MergeLessPlugin from 'antd-pro-merge-less'; ...@@ -4,6 +4,25 @@ import MergeLessPlugin from 'antd-pro-merge-less';
import AntDesignThemePlugin from 'antd-theme-webpack-plugin'; import AntDesignThemePlugin from 'antd-theme-webpack-plugin';
import path from 'path'; import path from 'path';
function getModulePackageName(module) {
if (!module.context) return null;
const nodeModulesPath = path.join(__dirname, '../node_modules/');
if (module.context.substring(0, nodeModulesPath.length) !== nodeModulesPath) {
return null;
}
const moduleRelativePath = module.context.substring(nodeModulesPath.length);
const [moduleDirName] = moduleRelativePath.split(path.sep);
let packageName = moduleDirName;
// handle tree shaking
if (packageName.match('^_')) {
// eslint-disable-next-line prefer-destructuring
packageName = packageName.match(/^_(@?[^@]+)/)[1];
}
return packageName;
}
export default config => { export default config => {
// pro 和 开发环境再添加这个插件 // pro 和 开发环境再添加这个插件
if (process.env.APP_TYPE === 'site' || process.env.NODE_ENV !== 'production') { if (process.env.APP_TYPE === 'site' || process.env.NODE_ENV !== 'production') {
...@@ -30,4 +49,32 @@ export default config => { ...@@ -30,4 +49,32 @@ export default config => {
}, },
]); ]);
} }
// optimize chunks
config.optimization
.runtimeChunk(false) // share the same chunks across different modules
.splitChunks({
chunks: 'async',
name: 'vendors',
maxInitialRequests: Infinity,
minSize: 0,
cacheGroups: {
vendors: {
test: module => {
const packageName = getModulePackageName(module);
if (packageName) {
return ['bizcharts', '@antv_data-set'].indexOf(packageName) >= 0;
}
return false;
},
name(module) {
const packageName = getModulePackageName(module);
if (['bizcharts', '@antv_data-set'].indexOf(packageName) >= 0) {
return 'viz'; // visualization package
}
return 'misc';
},
},
},
});
}; };
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment