diff --git a/packages/webpack5/__tests__/configuration/__snapshots__/base.spec.ts.snap b/packages/webpack5/__tests__/configuration/__snapshots__/base.spec.ts.snap index fdd16144a..4f131a1b2 100644 --- a/packages/webpack5/__tests__/configuration/__snapshots__/base.spec.ts.snap +++ b/packages/webpack5/__tests__/configuration/__snapshots__/base.spec.ts.snap @@ -648,3 +648,5 @@ exports[`base configuration support env.watchNodeModules 1`] = ` "managedPaths": [], } `; + +exports[`base configuration supports env.sourceMap=hidden-source-map 1`] = `"../../../ios-sourceMaps/[file].map[query]"`; diff --git a/packages/webpack5/__tests__/configuration/base.spec.ts b/packages/webpack5/__tests__/configuration/base.spec.ts index dc4ab697c..3a5690f31 100644 --- a/packages/webpack5/__tests__/configuration/base.spec.ts +++ b/packages/webpack5/__tests__/configuration/base.spec.ts @@ -210,4 +210,15 @@ describe('base configuration', () => { expect(config.get('profile')).toBe(true); }); + + it('supports env.sourceMap=hidden-source-map', () => { + init({ + ios: true, + sourceMap: 'hidden-source-map', + }); + const config = base(new Config()); + + expect(config.output.get('sourceMapFilename')).toMatchSnapshot(); + expect(config.get('devtool')).toBe('hidden-source-map'); + }); }); diff --git a/packages/webpack5/src/configuration/base.ts b/packages/webpack5/src/configuration/base.ts index ac9bfdf27..f9f99f362 100644 --- a/packages/webpack5/src/configuration/base.ts +++ b/packages/webpack5/src/configuration/base.ts @@ -1,4 +1,4 @@ -import { extname, resolve } from 'path'; +import { extname, relative, resolve } from 'path'; import { ContextExclusionPlugin, DefinePlugin, @@ -32,6 +32,7 @@ import { export default function (config: Config, env: IWebpackEnv = _env): Config { const entryPath = getEntryPath(); const platform = getPlatformName(); + const outputPath = getAbsoluteDistPath(); const mode = env.production ? 'production' : 'development'; // set mode @@ -80,6 +81,15 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { config.devtool(getSourceMapType(env.sourceMap)); + // when using hidden-source-map, output source maps to the `platforms/{platformName}-sourceMaps` folder + if (env.sourceMap === 'hidden-source-map') { + const sourceMapAbsolutePath = getProjectFilePath( + `./platforms/${platform}-sourceMaps/[file].map[query]` + ); + const sourceMapRelativePath = relative(outputPath, sourceMapAbsolutePath); + config.output.sourceMapFilename(sourceMapRelativePath); + } + // todo: figure out easiest way to make "node" target work in ns // rather than the custom ns target implementation that's hard to maintain // appears to be working - but we still have to deal with HMR @@ -110,7 +120,7 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { }); config.output - .path(getAbsoluteDistPath()) + .path(outputPath) .pathinfo(false) .publicPath('') .libraryTarget('commonjs')