index.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. const HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin')
  2. module.exports.chain = function (chain, cfg) {
  3. if (!cfg.tauri.embeddedServer.active) {
  4. chain.optimization.splitChunks({
  5. chunks: 'all',
  6. minSize: 0,
  7. maxSize: Infinity,
  8. maxAsyncRequests: 1,
  9. maxInitialRequests: 1,
  10. automaticNameDelimiter: '~',
  11. name: true,
  12. cacheGroups: {
  13. styles: {
  14. name: 'styles',
  15. chunks: 'all'
  16. },
  17. commons: {
  18. name: 'vendors',
  19. chunks: 'all'
  20. }
  21. }
  22. })
  23. chain.output.filename(`js/app.js`)
  24. if (cfg.ctx.prod) {
  25. if (cfg.build.extractCSS) {
  26. chain.plugin('mini-css-extract')
  27. .tap(options => {
  28. options[0].filename = 'css/app.css'
  29. return options
  30. })
  31. }
  32. chain.plugin('html-webpack')
  33. .tap(options => {
  34. options[0].inlineSource = '.(js|css)$'
  35. return options
  36. })
  37. chain.module.rule('babel')
  38. .use('babel-loader')
  39. .tap(options => {
  40. options.plugins.push([
  41. 'system-import-transformer', { // needs constant attention
  42. modules: 'common'
  43. }
  44. ])
  45. return options
  46. })
  47. }
  48. const modules = {
  49. images: 'url-loader',
  50. fonts: 'url-loader',
  51. media: 'url-loader'
  52. }
  53. for (const module in modules) {
  54. chain.module.rule(module)
  55. .use(modules[module])
  56. .tap(options => {
  57. options.limit = undefined
  58. return options
  59. })
  60. }
  61. }
  62. if (cfg.ctx.prod && !cfg.tauri.embeddedServer.active) {
  63. chain.plugin('html-webpack-inline-source')
  64. .use(HtmlWebpackInlineSourcePlugin)
  65. }
  66. }