From 8ac990e6a406c5d752a05b47e9780511de04eae8 Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Wed, 12 Feb 2025 21:59:51 +0100 Subject: [PATCH 01/14] feat: SourceMapPlugin --- .../repack/src/plugins/SourceMapPlugin.ts | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 packages/repack/src/plugins/SourceMapPlugin.ts diff --git a/packages/repack/src/plugins/SourceMapPlugin.ts b/packages/repack/src/plugins/SourceMapPlugin.ts new file mode 100644 index 000000000..41ef06e07 --- /dev/null +++ b/packages/repack/src/plugins/SourceMapPlugin.ts @@ -0,0 +1,70 @@ +import type { Compiler, RspackPluginInstance } from '@rspack/core'; + +export class SourceMapPlugin implements RspackPluginInstance { + apply(compiler: Compiler) { + if (!compiler.options.devtool) { + return; + } + + const platform = compiler.name as string; + const format = compiler.options.devtool; + const devtoolModuleFilenameTemplate = + compiler.options.output.devtoolModuleFilenameTemplate; + const devtoolFallbackModuleFilenameTemplate = + compiler.options.output.devtoolFallbackModuleFilenameTemplate; + + if ( + format === 'eval' || + format === 'eval-source-map' || + format === 'eval-cheap-source-map' || + format === 'eval-cheap-module-source-map' || + format === 'eval-nosources-source-map' || + format === 'eval-nosources-cheap-source-map' || + format === 'eval-nosources-cheap-module-source-map' + ) { + throw new Error( + '[RepackSourceMapPlugin] Eval source maps are not supported' + ); + } + + if ( + format === 'inline-cheap-source-map' || + format === 'inline-cheap-module-source-map' || + format === 'inline-source-map' || + format === 'inline-nosources-cheap-source-map' || + format === 'inline-nosources-cheap-module-source-map' || + format === 'inline-nosources-source-map' + ) { + throw new Error( + '[RepackSourceMapPlugin] Inline source maps are not supported' + ); + } + + const hidden = format.includes('hidden'); + const cheap = format.includes('cheap'); + const moduleMaps = format.includes('module'); + const noSources = format.includes('nosources'); + const debugIds = format.includes('debugids'); + + // TODO Fix sourcemap directory structure + // Right now its very messy and not every node module is inside of the node module + // like React Devtools backend etc or some symilinked module appear with relative path + // We should normalize this through a custom handler and provide an output similar to Metro + new compiler.webpack.SourceMapDevToolPlugin({ + filename: '[file].map', + moduleFilenameTemplate: devtoolModuleFilenameTemplate, + fallbackModuleFilenameTemplate: devtoolFallbackModuleFilenameTemplate, + append: hidden + ? false + : `//# sourceMappingURL=[url]?platform=${platform}`, + module: moduleMaps ? true : !cheap, + columns: !cheap, + noSources, + // TODO verify this + namespace: + compiler.options.output.devtoolNamespace ?? + compiler.options.output.uniqueName, + debugIds, + }).apply(compiler); + } +} From 4385b1f99fe07a87efbdbebb3e844df7e07160bc Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Wed, 12 Feb 2025 22:01:31 +0100 Subject: [PATCH 02/14] refactor: use SourceMapPlugin instead of SourceMapDevtoolPlugin directly --- .../repack/src/plugins/DevelopmentPlugin.ts | 13 ------------- packages/repack/src/plugins/RepackPlugin.ts | 19 ++----------------- 2 files changed, 2 insertions(+), 30 deletions(-) diff --git a/packages/repack/src/plugins/DevelopmentPlugin.ts b/packages/repack/src/plugins/DevelopmentPlugin.ts index 94eda8987..bd8555d01 100644 --- a/packages/repack/src/plugins/DevelopmentPlugin.ts +++ b/packages/repack/src/plugins/DevelopmentPlugin.ts @@ -127,19 +127,6 @@ export class DevelopmentPlugin implements RspackPluginInstance { // setup HMR new compiler.webpack.HotModuleReplacementPlugin().apply(compiler); - // setup HMR source maps - new compiler.webpack.SourceMapDevToolPlugin({ - test: /\.hot-update\.js$/, - filename: '[file].map', - append: `//# sourceMappingURL=[url]?platform=${this.config.platform}`, - module: true, - columns: true, - noSources: false, - namespace: - compiler.options.output.devtoolNamespace ?? - compiler.options.output.uniqueName, - }).apply(compiler); - // setup React Refresh manually instead of using the official plugin // to avoid issues with placement of reactRefreshEntry new compiler.webpack.ProvidePlugin({ diff --git a/packages/repack/src/plugins/RepackPlugin.ts b/packages/repack/src/plugins/RepackPlugin.ts index 2e224e82e..6551712cb 100644 --- a/packages/repack/src/plugins/RepackPlugin.ts +++ b/packages/repack/src/plugins/RepackPlugin.ts @@ -6,6 +6,7 @@ import { LoggerPlugin, type LoggerPluginConfig } from './LoggerPlugin.js'; import { NativeEntryPlugin } from './NativeEntryPlugin.js'; import { OutputPlugin, type OutputPluginConfig } from './OutputPlugin/index.js'; import { RepackTargetPlugin } from './RepackTargetPlugin/index.js'; +import { SourceMapPlugin } from './SourceMapPlugin.js'; /** * {@link RepackPlugin} configuration options. @@ -144,23 +145,7 @@ export class RepackPlugin implements RspackPluginInstance { platform: this.config.platform, }).apply(compiler); - if (this.config.sourceMaps) { - // TODO Fix sourcemap directory structure - // Right now its very messy and not every node module is inside of the node module - // like React Devtools backend etc or some symilinked module appear with relative path - // We should normalize this through a custom handler and provide an output similar to Metro - new compiler.webpack.SourceMapDevToolPlugin({ - test: /\.(js)?bundle$/, - filename: '[file].map', - append: `//# sourceMappingURL=[url]?platform=${this.config.platform}`, - module: true, - columns: true, - noSources: false, - namespace: - compiler.options.output.devtoolNamespace ?? - compiler.options.output.uniqueName, - }).apply(compiler); - } + new SourceMapPlugin().apply(compiler); if (this.config.logger) { new LoggerPlugin({ From 959fa2931a6bc06f2be5795ed7038921d7ab24a0 Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Wed, 12 Feb 2025 22:16:02 +0100 Subject: [PATCH 03/14] fix: unset builtin devtool --- packages/repack/src/plugins/SourceMapPlugin.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/repack/src/plugins/SourceMapPlugin.ts b/packages/repack/src/plugins/SourceMapPlugin.ts index 41ef06e07..218aecb8e 100644 --- a/packages/repack/src/plugins/SourceMapPlugin.ts +++ b/packages/repack/src/plugins/SourceMapPlugin.ts @@ -6,8 +6,11 @@ export class SourceMapPlugin implements RspackPluginInstance { return; } - const platform = compiler.name as string; const format = compiler.options.devtool; + // disable builtin sourcemap generation + compiler.options.devtool = false; + + const platform = compiler.name as string; const devtoolModuleFilenameTemplate = compiler.options.output.devtoolModuleFilenameTemplate; const devtoolFallbackModuleFilenameTemplate = From 183de255745271b36b203224efd7164fc2ba615c Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Wed, 12 Feb 2025 22:47:27 +0100 Subject: [PATCH 04/14] feat: error formatting, platform param --- packages/repack/src/plugins/RepackPlugin.ts | 2 +- .../repack/src/plugins/SourceMapPlugin.ts | 29 +++++++++++++------ .../src/plugins/utils/ConfigurationError.ts | 13 +++++++++ 3 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 packages/repack/src/plugins/utils/ConfigurationError.ts diff --git a/packages/repack/src/plugins/RepackPlugin.ts b/packages/repack/src/plugins/RepackPlugin.ts index 6551712cb..855d91e46 100644 --- a/packages/repack/src/plugins/RepackPlugin.ts +++ b/packages/repack/src/plugins/RepackPlugin.ts @@ -145,7 +145,7 @@ export class RepackPlugin implements RspackPluginInstance { platform: this.config.platform, }).apply(compiler); - new SourceMapPlugin().apply(compiler); + new SourceMapPlugin({ platform: this.config.platform }).apply(compiler); if (this.config.logger) { new LoggerPlugin({ diff --git a/packages/repack/src/plugins/SourceMapPlugin.ts b/packages/repack/src/plugins/SourceMapPlugin.ts index 218aecb8e..d3f2ed29f 100644 --- a/packages/repack/src/plugins/SourceMapPlugin.ts +++ b/packages/repack/src/plugins/SourceMapPlugin.ts @@ -1,6 +1,13 @@ import type { Compiler, RspackPluginInstance } from '@rspack/core'; +import { ConfigurationError } from './utils/ConfigurationError.js'; + +interface SourceMapPluginConfig { + platform?: string; +} export class SourceMapPlugin implements RspackPluginInstance { + constructor(private config: SourceMapPluginConfig = {}) {} + apply(compiler: Compiler) { if (!compiler.options.devtool) { return; @@ -10,7 +17,12 @@ export class SourceMapPlugin implements RspackPluginInstance { // disable builtin sourcemap generation compiler.options.devtool = false; - const platform = compiler.name as string; + const platform = this.config.platform ?? (compiler.name as string); + + // explicitly fallback to uniqueName if devtoolNamespace is not set + const devtoolNamespace = + compiler.options.output.devtoolNamespace ?? + compiler.options.output.uniqueName; const devtoolModuleFilenameTemplate = compiler.options.output.devtoolModuleFilenameTemplate; const devtoolFallbackModuleFilenameTemplate = @@ -25,8 +37,9 @@ export class SourceMapPlugin implements RspackPluginInstance { format === 'eval-nosources-cheap-source-map' || format === 'eval-nosources-cheap-module-source-map' ) { - throw new Error( - '[RepackSourceMapPlugin] Eval source maps are not supported' + throw new ConfigurationError( + '[RepackSourceMapPlugin] Eval source maps are not supported. ' + + 'Please use a different setting for `config.devtool`.' ); } @@ -38,8 +51,9 @@ export class SourceMapPlugin implements RspackPluginInstance { format === 'inline-nosources-cheap-module-source-map' || format === 'inline-nosources-source-map' ) { - throw new Error( - '[RepackSourceMapPlugin] Inline source maps are not supported' + throw new ConfigurationError( + '[RepackSourceMapPlugin] Inline source maps are not supported. ' + + 'Please use a different setting for `config.devtool`.' ); } @@ -63,10 +77,7 @@ export class SourceMapPlugin implements RspackPluginInstance { module: moduleMaps ? true : !cheap, columns: !cheap, noSources, - // TODO verify this - namespace: - compiler.options.output.devtoolNamespace ?? - compiler.options.output.uniqueName, + namespace: devtoolNamespace, debugIds, }).apply(compiler); } diff --git a/packages/repack/src/plugins/utils/ConfigurationError.ts b/packages/repack/src/plugins/utils/ConfigurationError.ts new file mode 100644 index 000000000..0dde41fc2 --- /dev/null +++ b/packages/repack/src/plugins/utils/ConfigurationError.ts @@ -0,0 +1,13 @@ +import { VERBOSE_ENV_KEY } from '../../env.js'; + +export class ConfigurationError extends Error { + constructor(message: string) { + super(message); + this.name = 'ConfigurationError'; + + // hide stack trace in non-verbose mode + if (!process.env[VERBOSE_ENV_KEY]) { + this.stack = undefined; + } + } +} From 319ef14192b756b8ed03ae3c9bfe36b0fbf33981 Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Wed, 12 Feb 2025 22:48:40 +0100 Subject: [PATCH 05/14] chore: comment --- packages/repack/src/plugins/SourceMapPlugin.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/repack/src/plugins/SourceMapPlugin.ts b/packages/repack/src/plugins/SourceMapPlugin.ts index d3f2ed29f..9b6cb0aa8 100644 --- a/packages/repack/src/plugins/SourceMapPlugin.ts +++ b/packages/repack/src/plugins/SourceMapPlugin.ts @@ -9,6 +9,7 @@ export class SourceMapPlugin implements RspackPluginInstance { constructor(private config: SourceMapPluginConfig = {}) {} apply(compiler: Compiler) { + // if devtool is explicitly set to false, skip generating source maps if (!compiler.options.devtool) { return; } From 1f2c3a3b5f3bcd7b0489085c3fdf0345dbc674f6 Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Wed, 12 Feb 2025 22:51:13 +0100 Subject: [PATCH 06/14] chore: remove devtool false from configs and templates --- apps/tester-app/rspack.config.mjs | 2 +- apps/tester-app/webpack.config.mjs | 1 - apps/tester-federation-v2/configs/rspack.host-app.mjs | 1 - apps/tester-federation-v2/configs/rspack.mini-app.mjs | 1 - apps/tester-federation-v2/configs/webpack.host-app.mjs | 1 - apps/tester-federation-v2/configs/webpack.mini-app.mjs | 1 - apps/tester-federation/configs/rspack.host-app.mjs | 1 - apps/tester-federation/configs/rspack.mini-app.mjs | 1 - apps/tester-federation/configs/webpack.host-app.mjs | 1 - apps/tester-federation/configs/webpack.mini-app.mjs | 1 - templates_v5/rspack.config.cjs | 5 ----- templates_v5/rspack.config.mjs | 5 ----- templates_v5/webpack.config.cjs | 5 ----- templates_v5/webpack.config.mjs | 5 ----- 14 files changed, 1 insertion(+), 30 deletions(-) diff --git a/apps/tester-app/rspack.config.mjs b/apps/tester-app/rspack.config.mjs index fdeefbfd9..42376f548 100644 --- a/apps/tester-app/rspack.config.mjs +++ b/apps/tester-app/rspack.config.mjs @@ -27,8 +27,8 @@ export default (env) => { return { mode, - devtool: false, context, + devtool: 'source-map', entry: './index.js', resolve: { ...Repack.getResolveOptions(platform), diff --git a/apps/tester-app/webpack.config.mjs b/apps/tester-app/webpack.config.mjs index 3f524f5dc..79369d689 100644 --- a/apps/tester-app/webpack.config.mjs +++ b/apps/tester-app/webpack.config.mjs @@ -27,7 +27,6 @@ export default (env) => { return { mode, - devtool: false, context, cache: process.env.USE_CACHE ? { diff --git a/apps/tester-federation-v2/configs/rspack.host-app.mjs b/apps/tester-federation-v2/configs/rspack.host-app.mjs index cf9f8490a..98e29fb8e 100644 --- a/apps/tester-federation-v2/configs/rspack.host-app.mjs +++ b/apps/tester-federation-v2/configs/rspack.host-app.mjs @@ -23,7 +23,6 @@ export default (env) => { return { mode, - devtool: false, context, entry: './src/host/index.js', resolve: { diff --git a/apps/tester-federation-v2/configs/rspack.mini-app.mjs b/apps/tester-federation-v2/configs/rspack.mini-app.mjs index ffdcf2aa1..2bedf8f9a 100644 --- a/apps/tester-federation-v2/configs/rspack.mini-app.mjs +++ b/apps/tester-federation-v2/configs/rspack.mini-app.mjs @@ -20,7 +20,6 @@ export default (env) => { return { mode, - devtool: false, context, entry: './src/mini/index.js', resolve: { diff --git a/apps/tester-federation-v2/configs/webpack.host-app.mjs b/apps/tester-federation-v2/configs/webpack.host-app.mjs index 030bd2da0..9581ec7a3 100644 --- a/apps/tester-federation-v2/configs/webpack.host-app.mjs +++ b/apps/tester-federation-v2/configs/webpack.host-app.mjs @@ -25,7 +25,6 @@ export default (env) => { return { mode, - devtool: false, context, entry: './src/host/index.js', resolve: { diff --git a/apps/tester-federation-v2/configs/webpack.mini-app.mjs b/apps/tester-federation-v2/configs/webpack.mini-app.mjs index 6fef51f68..24336e28e 100644 --- a/apps/tester-federation-v2/configs/webpack.mini-app.mjs +++ b/apps/tester-federation-v2/configs/webpack.mini-app.mjs @@ -22,7 +22,6 @@ export default (env) => { return { mode, - devtool: false, context, entry: './src/mini/index.js', resolve: { diff --git a/apps/tester-federation/configs/rspack.host-app.mjs b/apps/tester-federation/configs/rspack.host-app.mjs index be88c4301..b6a883516 100644 --- a/apps/tester-federation/configs/rspack.host-app.mjs +++ b/apps/tester-federation/configs/rspack.host-app.mjs @@ -25,7 +25,6 @@ export default (env) => { /** @type {import('@rspack/core').Configuration} */ const config = { mode, - devtool: false, context, entry: './src/host/index.js', resolve: { diff --git a/apps/tester-federation/configs/rspack.mini-app.mjs b/apps/tester-federation/configs/rspack.mini-app.mjs index 58297fda4..a8d2b9180 100644 --- a/apps/tester-federation/configs/rspack.mini-app.mjs +++ b/apps/tester-federation/configs/rspack.mini-app.mjs @@ -22,7 +22,6 @@ export default (env) => { /** @type {import('@rspack/core').Configuration} */ const config = { mode, - devtool: false, context, entry: './src/mini/index.js', resolve: { diff --git a/apps/tester-federation/configs/webpack.host-app.mjs b/apps/tester-federation/configs/webpack.host-app.mjs index 72ff6259f..4fd4994f4 100644 --- a/apps/tester-federation/configs/webpack.host-app.mjs +++ b/apps/tester-federation/configs/webpack.host-app.mjs @@ -25,7 +25,6 @@ export default (env) => { return { mode, - devtool: false, context, entry: './src/host/index.js', resolve: { diff --git a/apps/tester-federation/configs/webpack.mini-app.mjs b/apps/tester-federation/configs/webpack.mini-app.mjs index 6c4a64bed..975503728 100644 --- a/apps/tester-federation/configs/webpack.mini-app.mjs +++ b/apps/tester-federation/configs/webpack.mini-app.mjs @@ -22,7 +22,6 @@ export default (env) => { return { mode, - devtool: false, context, entry: './src/mini/index.js', resolve: { diff --git a/templates_v5/rspack.config.cjs b/templates_v5/rspack.config.cjs index 2dc199463..63cb1cdef 100644 --- a/templates_v5/rspack.config.cjs +++ b/templates_v5/rspack.config.cjs @@ -35,11 +35,6 @@ module.exports = (env) => { return { mode, - /** - * This should be always `false`, since the Source Map configuration is done - * by `SourceMapDevToolPlugin`. - */ - devtool: false, context, entry, resolve: { diff --git a/templates_v5/rspack.config.mjs b/templates_v5/rspack.config.mjs index 9d139d560..2c93eda6e 100644 --- a/templates_v5/rspack.config.mjs +++ b/templates_v5/rspack.config.mjs @@ -39,11 +39,6 @@ export default (env) => { return { mode, - /** - * This should be always `false`, since the Source Map configuration is done - * by `SourceMapDevToolPlugin`. - */ - devtool: false, context, entry, resolve: { diff --git a/templates_v5/webpack.config.cjs b/templates_v5/webpack.config.cjs index 3c459cd51..c9c0388a5 100644 --- a/templates_v5/webpack.config.cjs +++ b/templates_v5/webpack.config.cjs @@ -46,11 +46,6 @@ module.exports = (env) => { return { mode, - /** - * This should be always `false`, since the Source Map configuration is done - * by `SourceMapDevToolPlugin`. - */ - devtool: false, context, /** * `getInitializationEntries` will return necessary entries with setup and initialization code. diff --git a/templates_v5/webpack.config.mjs b/templates_v5/webpack.config.mjs index 48a6784c2..77b335279 100644 --- a/templates_v5/webpack.config.mjs +++ b/templates_v5/webpack.config.mjs @@ -50,11 +50,6 @@ export default (env) => { return { mode, - /** - * This should be always `false`, since the Source Map configuration is done - * by `SourceMapDevToolPlugin`. - */ - devtool: false, context, entry, resolve: { From 4cda8b1952fcd87d78b243f35bde484dfeec3c13 Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Wed, 12 Feb 2025 22:52:19 +0100 Subject: [PATCH 07/14] feat: use source-map devtool as default --- packages/repack/src/commands/common/config/getRepackConfig.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/repack/src/commands/common/config/getRepackConfig.ts b/packages/repack/src/commands/common/config/getRepackConfig.ts index 340e68117..641e19438 100644 --- a/packages/repack/src/commands/common/config/getRepackConfig.ts +++ b/packages/repack/src/commands/common/config/getRepackConfig.ts @@ -1,5 +1,6 @@ export function getRepackConfig() { return { + devtool: 'source-map', output: { publicPath: 'noop:///', }, From b7b6b8850d5c13722eebbedec42bf20aa96d2972 Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Wed, 12 Feb 2025 22:56:53 +0100 Subject: [PATCH 08/14] feat: remove sourceMaps option from RepackPlugin --- packages/repack/src/plugins/RepackPlugin.ts | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/repack/src/plugins/RepackPlugin.ts b/packages/repack/src/plugins/RepackPlugin.ts index 855d91e46..7c745b5f1 100644 --- a/packages/repack/src/plugins/RepackPlugin.ts +++ b/packages/repack/src/plugins/RepackPlugin.ts @@ -21,13 +21,6 @@ export interface RepackPluginConfig { /** Target application platform. */ platform: string; - /** - * Whether source maps should be generated. Defaults to `true`. - * - * Setting this to `false`, disables any source map generation. - */ - sourceMaps?: boolean; - /** * Output options specifying where to save generated bundle, source map and assets. * @@ -109,7 +102,6 @@ export class RepackPlugin implements RspackPluginInstance { * @param config Plugin configuration options. */ constructor(private config: RepackPluginConfig) { - this.config.sourceMaps = this.config.sourceMaps ?? true; this.config.logger = this.config.logger ?? true; } @@ -145,7 +137,9 @@ export class RepackPlugin implements RspackPluginInstance { platform: this.config.platform, }).apply(compiler); - new SourceMapPlugin({ platform: this.config.platform }).apply(compiler); + new SourceMapPlugin({ + platform: this.config.platform, + }).apply(compiler); if (this.config.logger) { new LoggerPlugin({ From 6c9e79d7c1a8fc83588c27de4886d21d40c2c8eb Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Wed, 12 Feb 2025 22:59:09 +0100 Subject: [PATCH 09/14] revert: keep sourcemap prop --- packages/repack/src/plugins/RepackPlugin.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/repack/src/plugins/RepackPlugin.ts b/packages/repack/src/plugins/RepackPlugin.ts index 7c745b5f1..2f6304a1a 100644 --- a/packages/repack/src/plugins/RepackPlugin.ts +++ b/packages/repack/src/plugins/RepackPlugin.ts @@ -21,6 +21,13 @@ export interface RepackPluginConfig { /** Target application platform. */ platform: string; + /** + * Whether source maps should be generated. Defaults to `true`. + * + * Setting this to `false`, disables any source map generation. + */ + sourceMaps?: boolean; + /** * Output options specifying where to save generated bundle, source map and assets. * @@ -102,6 +109,7 @@ export class RepackPlugin implements RspackPluginInstance { * @param config Plugin configuration options. */ constructor(private config: RepackPluginConfig) { + this.config.sourceMaps = this.config.sourceMaps ?? true; this.config.logger = this.config.logger ?? true; } @@ -137,9 +145,11 @@ export class RepackPlugin implements RspackPluginInstance { platform: this.config.platform, }).apply(compiler); - new SourceMapPlugin({ - platform: this.config.platform, - }).apply(compiler); + if (this.config.sourceMaps) { + new SourceMapPlugin({ + platform: this.config.platform, + }).apply(compiler); + } if (this.config.logger) { new LoggerPlugin({ From e5bad944aaec218c3d32730b95d9a186379b2f50 Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Wed, 12 Feb 2025 23:06:25 +0100 Subject: [PATCH 10/14] chore: remove devtool setting --- apps/tester-app/rspack.config.mjs | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/tester-app/rspack.config.mjs b/apps/tester-app/rspack.config.mjs index 42376f548..768aef0d9 100644 --- a/apps/tester-app/rspack.config.mjs +++ b/apps/tester-app/rspack.config.mjs @@ -28,7 +28,6 @@ export default (env) => { return { mode, context, - devtool: 'source-map', entry: './index.js', resolve: { ...Repack.getResolveOptions(platform), From 9037e7e4d0dd26d0f2c6a501d510856751a51deb Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Wed, 12 Feb 2025 23:52:06 +0100 Subject: [PATCH 11/14] fix: look for js extensions --- packages/repack/src/plugins/SourceMapPlugin.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/repack/src/plugins/SourceMapPlugin.ts b/packages/repack/src/plugins/SourceMapPlugin.ts index 9b6cb0aa8..18312e5f1 100644 --- a/packages/repack/src/plugins/SourceMapPlugin.ts +++ b/packages/repack/src/plugins/SourceMapPlugin.ts @@ -69,6 +69,7 @@ export class SourceMapPlugin implements RspackPluginInstance { // like React Devtools backend etc or some symilinked module appear with relative path // We should normalize this through a custom handler and provide an output similar to Metro new compiler.webpack.SourceMapDevToolPlugin({ + test: /\.([cm]?jsx?|bundle)$/, filename: '[file].map', moduleFilenameTemplate: devtoolModuleFilenameTemplate, fallbackModuleFilenameTemplate: devtoolFallbackModuleFilenameTemplate, From fc7f93478997cc244c659f6d9173a1afe2f21630 Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Wed, 12 Feb 2025 23:54:02 +0100 Subject: [PATCH 12/14] fix: remove unsupported debugIds --- packages/repack/src/plugins/SourceMapPlugin.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/repack/src/plugins/SourceMapPlugin.ts b/packages/repack/src/plugins/SourceMapPlugin.ts index 18312e5f1..cc119d144 100644 --- a/packages/repack/src/plugins/SourceMapPlugin.ts +++ b/packages/repack/src/plugins/SourceMapPlugin.ts @@ -62,7 +62,6 @@ export class SourceMapPlugin implements RspackPluginInstance { const cheap = format.includes('cheap'); const moduleMaps = format.includes('module'); const noSources = format.includes('nosources'); - const debugIds = format.includes('debugids'); // TODO Fix sourcemap directory structure // Right now its very messy and not every node module is inside of the node module @@ -80,7 +79,6 @@ export class SourceMapPlugin implements RspackPluginInstance { columns: !cheap, noSources, namespace: devtoolNamespace, - debugIds, }).apply(compiler); } } From f2300fd9ba14f093474b37a5bc84d99eef051eb6 Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Thu, 13 Feb 2025 00:01:51 +0100 Subject: [PATCH 13/14] chore: changeset --- .changeset/afraid-lies-explain.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/afraid-lies-explain.md diff --git a/.changeset/afraid-lies-explain.md b/.changeset/afraid-lies-explain.md new file mode 100644 index 000000000..3f304b95f --- /dev/null +++ b/.changeset/afraid-lies-explain.md @@ -0,0 +1,7 @@ +--- +"@callstack/repack": major +--- + +BREAKING: `config.devtool` is now used to control the behaviour of generated sourcemaps. To enable sourcemaps again, please remove `devtool: false` from your config or set it explicitly to one of valid values (e.g. `source-map`). + +Introduced a dedicated `SourceMapPlugin` that consolidates sourcemap configuration and improves sourcemap handling by relying on the `devtool` option. The plugin is part of the Repack plugin and does not need to be added separately. From 20b526d39d5aafbfe9cd5500a5e3612e137f8e7a Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Thu, 13 Feb 2025 10:29:42 +0100 Subject: [PATCH 14/14] fix: simplify format types --- .../repack/src/plugins/SourceMapPlugin.ts | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/packages/repack/src/plugins/SourceMapPlugin.ts b/packages/repack/src/plugins/SourceMapPlugin.ts index cc119d144..1421f7191 100644 --- a/packages/repack/src/plugins/SourceMapPlugin.ts +++ b/packages/repack/src/plugins/SourceMapPlugin.ts @@ -29,29 +29,14 @@ export class SourceMapPlugin implements RspackPluginInstance { const devtoolFallbackModuleFilenameTemplate = compiler.options.output.devtoolFallbackModuleFilenameTemplate; - if ( - format === 'eval' || - format === 'eval-source-map' || - format === 'eval-cheap-source-map' || - format === 'eval-cheap-module-source-map' || - format === 'eval-nosources-source-map' || - format === 'eval-nosources-cheap-source-map' || - format === 'eval-nosources-cheap-module-source-map' - ) { + if (format.startsWith('eval')) { throw new ConfigurationError( '[RepackSourceMapPlugin] Eval source maps are not supported. ' + 'Please use a different setting for `config.devtool`.' ); } - if ( - format === 'inline-cheap-source-map' || - format === 'inline-cheap-module-source-map' || - format === 'inline-source-map' || - format === 'inline-nosources-cheap-source-map' || - format === 'inline-nosources-cheap-module-source-map' || - format === 'inline-nosources-source-map' - ) { + if (format.startsWith('inline')) { throw new ConfigurationError( '[RepackSourceMapPlugin] Inline source maps are not supported. ' + 'Please use a different setting for `config.devtool`.'