const HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin') module.exports.chain = function (chain, cfg) { chain.optimization.splitChunks({ chunks: 'all', minSize: 0, maxSize: Infinity, maxAsyncRequests: 1, maxInitialRequests: 1, automaticNameDelimiter: '~', name: true, cacheGroups: { styles: { name: 'styles', chunks: 'all' }, commons: { name: 'vendors', chunks: 'all' } } }) if (!cfg.tauri.embeddedServer.active) { chain.output.filename(`js/app.js`) if (cfg.ctx.prod) { if (cfg.build.extractCSS) { chain.plugin('mini-css-extract') .tap(options => { options[0].filename = 'css/app.css' return options }) } chain.plugin('html-webpack') .tap(options => { options[0].inlineSource = '.(js|css)$' return options }) chain.module.rule('babel') .use('babel-loader') .tap(options => { options.plugins.push([ 'system-import-transformer', { // needs constant attention modules: 'common' } ]) return options }) } const modules = { images: 'url-loader', fonts: 'url-loader', media: 'url-loader' } for (const module in modules) { chain.module.rule(module) .use(modules[module]) .tap(options => { options.limit = undefined return options }) } } if (cfg.ctx.prod && !cfg.tauri.embeddedServer.active) { chain.plugin('html-webpack-inline-source') .use(HtmlWebpackInlineSourcePlugin) } }