const staticDir = 'xxx_static';
const isDev = process.env.NODE_ENV === 'development';
const ChainWebpack = (config, { webpack }) => {
config.plugin('extract-css').tap(() => [
{
filename: `${staticDir}/css/[name].[contenthash:8].css`,
chunkFilename: `${staticDir}/css/[name].[contenthash:8].chunk.css`,
ignoreOrder: true,
},
]);
config.module
.rule('css')
.oneOf('css')
.use('extract-css-loader')
.tap((options) => ({
publicPath: '/',
hmr: isDev,
}));
config.module
.rule('less')
.oneOf('css')
.use('extract-css-loader')
.tap((options) => ({
publicPath: '/',
hmr: isDev,
}));
config.output
.filename(`${staticDir}/js/[name].[hash:8].js`)
.chunkFilename(`${staticDir}/js/[name].[contenthash:8].chunk.js`);
config.module
.rule('images')
.test(/.(png|jpe?g|gif|webp|ico)(?.*)?$/)
.use('url-loader')
.loader(require.resolve('@umijs/deps/compiled/url-loader'))
.options({
name: `${staticDir}/[name].[hash:8].[ext]`,
esModule: false,
fallback: {
loader: require.resolve('@umijs/deps/compiled/file-loader'),
options: {
name: `${staticDir}/images/[name].[hash:8].[ext]`,
esModule: false,
},
},
});
config.module
.rule('svg')
.test(/.(svg)(?.*)?$/)
.use('file-loader')
.loader(require.resolve('@umijs/deps/compiled/file-loader'))
.options({
name: `${staticDir}/images/[name].[hash:8].[ext]`,
esModule: false,
});
config.module
.rule('fonts')
.test(/.(eot|woff|woff2|ttf)(?.*)?$/)
.use('file-loader')
.loader(require.resolve('@umijs/deps/compiled/file-loader'))
.options({
name: `${staticDir}/fonts/[name].[hash:8].[ext]`,
esModule: false,
});
};
export default ChainWebpack;
