From e4a2d7513bf11d24a59386aa3d83db88f2c727d3 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 6 Sep 2022 01:45:59 -0400 Subject: [PATCH 1/4] Split node_modules to separate bundles --- webpack.common.js | 20 +++++++++++++++++++- webpack.dev.js | 2 +- webpack.prod.js | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/webpack.common.js b/webpack.common.js index 8d6d702bf6..6d28d90b13 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -81,11 +81,29 @@ module.exports = { }) ], output: { - filename: '[name].jellyfin.bundle.js', + filename: '[name].bundle.js', chunkFilename: '[name].[contenthash].chunk.js', path: path.resolve(__dirname, 'dist'), publicPath: '' }, + optimization: { + runtimeChunk: 'single', + splitChunks: { + chunks: 'all', + maxInitialRequests: Infinity, + cacheGroups: { + vendor: { + test: /[\\/]node_modules[\\/]/, + name(module) { + // get the name. E.g. node_modules/packageName/not/this/part.js + // or node_modules/packageName + const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]; + return `node_modules.${packageName}`; + } + } + } + } + }, module: { rules: [ { diff --git a/webpack.dev.js b/webpack.dev.js index 345468f89f..61d7d3b2ea 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -5,7 +5,7 @@ module.exports = merge(common, { // In order for live reload to work we must use "web" as the target not "browserslist" target: process.env.WEBPACK_SERVE ? 'web' : 'browserslist', mode: 'development', - entry: './scripts/site.js', + entry: { 'main.jellyfin': './scripts/site.js' }, devtool: 'source-map', module: { rules: [ diff --git a/webpack.prod.js b/webpack.prod.js index ad02582f91..f87e9b429e 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -5,7 +5,7 @@ const WorkboxPlugin = require('workbox-webpack-plugin'); module.exports = merge(common, { mode: 'production', - entry: './scripts/site.js', + entry: { 'main.jellyfin': './scripts/site.js' }, plugins: [ new WorkboxPlugin.InjectManifest({ swSrc: path.resolve(__dirname, 'src/serviceworker.js'), From 15b4842c4f7e00e7e9d155ec4f04c3146c901071 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 6 Sep 2022 02:14:07 -0400 Subject: [PATCH 2/4] Use recommended devtool for development builds --- webpack.dev.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack.dev.js b/webpack.dev.js index 61d7d3b2ea..7444a8b304 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -6,7 +6,7 @@ module.exports = merge(common, { target: process.env.WEBPACK_SERVE ? 'web' : 'browserslist', mode: 'development', entry: { 'main.jellyfin': './scripts/site.js' }, - devtool: 'source-map', + devtool: 'eval', module: { rules: [ { From 073ab54aefe4fe31f917eeeb68c8e35edf4a6b39 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 6 Sep 2022 02:18:19 -0400 Subject: [PATCH 3/4] Enable babel build caching --- webpack.common.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/webpack.common.js b/webpack.common.js index 6d28d90b13..f721c60507 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -116,7 +116,11 @@ module.exports = { test: /\.(js|jsx)$/, exclude: /node_modules[\\/](?!@uupaa[\\/]dynamic-import-polyfill|blurhash|date-fns|epubjs|flv.js|libarchive.js|marked|react-router|screenfull)/, use: [{ - loader: 'babel-loader' + loader: 'babel-loader', + options: { + cacheCompression: false, + cacheDirectory: true + } }] }, { @@ -140,6 +144,8 @@ module.exports = { use: [{ loader: 'babel-loader', options: { + cacheCompression: false, + cacheDirectory: true, plugins: [ '@babel/transform-modules-umd' ] From 39f2094752c6f4a7bc29e82b915eaff04b7a2172 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 6 Sep 2022 09:54:50 -0400 Subject: [PATCH 4/4] Use recommended devtool for development builds --- webpack.dev.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack.dev.js b/webpack.dev.js index 7444a8b304..8cfa98f2f0 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -6,7 +6,7 @@ module.exports = merge(common, { target: process.env.WEBPACK_SERVE ? 'web' : 'browserslist', mode: 'development', entry: { 'main.jellyfin': './scripts/site.js' }, - devtool: 'eval', + devtool: 'eval-cheap-module-source-map', module: { rules: [ {