Enable all webpack sourcemaps in dev build, disable all in prod build (#25089)
- Enable all source maps in dev build - Disable all source maps in prod build - Provide `ENABLE_SOURCEMAP` env var to override it. I think the strange error seen in https://github.com/go-gitea/gitea/issues/24784 is sourcemap related, so if we enable/disable them all, it might go away. But it's most definitely a Safari bug. With all sourcemaps disabled, binary size goes down by around 1-2 MB, with all enabled it goes up by around 12MB. If +12MB is acceptable, we could also always enable them by default as fully source maps do have some debugging benefits.
This commit is contained in:
parent
8d7893e817
commit
c09f747b51
2 changed files with 15 additions and 9 deletions
|
@ -132,6 +132,8 @@ If pre-built frontend files are present it is possible to only build the backend
|
||||||
TAGS="bindata" make backend
|
TAGS="bindata" make backend
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Webpack source maps are by default enabled in development builds and disabled in production builds. They can be enabled by setting the `ENABLE_SOURCEMAP=true` environment variable.
|
||||||
|
|
||||||
## Test
|
## Test
|
||||||
|
|
||||||
After following the steps above, a `gitea` binary will be available in the working directory.
|
After following the steps above, a `gitea` binary will be available in the working directory.
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {parse, dirname} from 'node:path';
|
||||||
import webpack from 'webpack';
|
import webpack from 'webpack';
|
||||||
import {fileURLToPath} from 'node:url';
|
import {fileURLToPath} from 'node:url';
|
||||||
import {readFileSync} from 'node:fs';
|
import {readFileSync} from 'node:fs';
|
||||||
|
import {env} from 'node:process';
|
||||||
|
|
||||||
const {EsbuildPlugin} = EsBuildLoader;
|
const {EsbuildPlugin} = EsBuildLoader;
|
||||||
const {SourceMapDevToolPlugin, DefinePlugin} = webpack;
|
const {SourceMapDevToolPlugin, DefinePlugin} = webpack;
|
||||||
|
@ -25,7 +26,14 @@ for (const path of glob('web_src/css/themes/*.css')) {
|
||||||
themes[parse(path).name] = [path];
|
themes[parse(path).name] = [path];
|
||||||
}
|
}
|
||||||
|
|
||||||
const isProduction = process.env.NODE_ENV !== 'development';
|
const isProduction = env.NODE_ENV !== 'development';
|
||||||
|
|
||||||
|
let sourceMapEnabled;
|
||||||
|
if ('ENABLE_SOURCEMAP' in env) {
|
||||||
|
sourceMapEnabled = env.ENABLE_SOURCEMAP === 'true';
|
||||||
|
} else {
|
||||||
|
sourceMapEnabled = !isProduction;
|
||||||
|
}
|
||||||
|
|
||||||
const filterCssImport = (url, ...args) => {
|
const filterCssImport = (url, ...args) => {
|
||||||
const cssFile = args[1] || args[0]; // resourcePath is 2nd argument for url and 3rd for import
|
const cssFile = args[1] || args[0]; // resourcePath is 2nd argument for url and 3rd for import
|
||||||
|
@ -122,7 +130,7 @@ export default {
|
||||||
{
|
{
|
||||||
loader: 'css-loader',
|
loader: 'css-loader',
|
||||||
options: {
|
options: {
|
||||||
sourceMap: true,
|
sourceMap: sourceMapEnabled,
|
||||||
url: {filter: filterCssImport},
|
url: {filter: filterCssImport},
|
||||||
import: {filter: filterCssImport},
|
import: {filter: filterCssImport},
|
||||||
},
|
},
|
||||||
|
@ -160,13 +168,9 @@ export default {
|
||||||
filename: 'css/[name].css',
|
filename: 'css/[name].css',
|
||||||
chunkFilename: 'css/[name].[contenthash:8].css',
|
chunkFilename: 'css/[name].[contenthash:8].css',
|
||||||
}),
|
}),
|
||||||
new SourceMapDevToolPlugin({
|
sourceMapEnabled && (new SourceMapDevToolPlugin({
|
||||||
filename: '[file].[contenthash:8].map',
|
filename: '[file].[contenthash:8].map',
|
||||||
include: [
|
})),
|
||||||
'js/index.js',
|
|
||||||
'css/index.css',
|
|
||||||
],
|
|
||||||
}),
|
|
||||||
new MonacoWebpackPlugin({
|
new MonacoWebpackPlugin({
|
||||||
filename: 'js/monaco-[name].[contenthash:8].worker.js',
|
filename: 'js/monaco-[name].[contenthash:8].worker.js',
|
||||||
}),
|
}),
|
||||||
|
@ -195,7 +199,7 @@ export default {
|
||||||
emitError: true,
|
emitError: true,
|
||||||
allow: '(Apache-2.0 OR BSD-2-Clause OR BSD-3-Clause OR MIT OR ISC OR CPAL-1.0 OR Unlicense OR EPL-1.0 OR EPL-2.0)',
|
allow: '(Apache-2.0 OR BSD-2-Clause OR BSD-3-Clause OR MIT OR ISC OR CPAL-1.0 OR Unlicense OR EPL-1.0 OR EPL-2.0)',
|
||||||
}) : new AddAssetPlugin('js/licenses.txt', `Licenses are disabled during development`),
|
}) : new AddAssetPlugin('js/licenses.txt', `Licenses are disabled during development`),
|
||||||
],
|
].filter(Boolean),
|
||||||
performance: {
|
performance: {
|
||||||
hints: false,
|
hints: false,
|
||||||
maxEntrypointSize: Infinity,
|
maxEntrypointSize: Infinity,
|
||||||
|
|
Loading…
Reference in a new issue