diff --git a/lib/config-generator.js b/lib/config-generator.js index 51461509..1c07f5d5 100644 --- a/lib/config-generator.js +++ b/lib/config-generator.js @@ -96,7 +96,7 @@ class ConfigGenerator { config.resolve = { extensions: ['.wasm', '.mjs', '.js', '.json', '.jsx', '.vue', '.ts', '.tsx'], - alias: Object.assign({}, this.webpackConfig.aliases) + alias: {} }; if (this.webpackConfig.useVueLoader) { @@ -108,6 +108,8 @@ class ConfigGenerator { config.resolve.alias['react-dom'] = 'preact-compat'; } + Object.assign(config.resolve.alias, this.webpackConfig.aliases); + config.externals = [...this.webpackConfig.externals]; return config; diff --git a/test/config-generator.js b/test/config-generator.js index 6f3ce7f0..741fb4c4 100644 --- a/test/config-generator.js +++ b/test/config-generator.js @@ -453,6 +453,28 @@ describe('The config-generator function', () => { 'testB': 'src/testB' }); }); + + it('with addAliases() that overwrites pre-defined aliases', () => { + const config = createConfig(); + config.outputPath = '/tmp/output/public-path'; + config.publicPath = '/public-path'; + config.enableVueLoader(); // Adds the 'vue$' alias + config.enablePreactPreset({ preactCompat: true }); // Adds the 'react' and 'react-dom' aliases + config.addAliases({ + 'foo': 'bar', + 'vue$': 'new-vue$', + 'react-dom': 'new-react-dom', + }); + + const actualConfig = configGenerator(config); + + expect(actualConfig.resolve.alias).to.deep.equals({ + 'foo': 'bar', + 'vue$': 'new-vue$', + 'react-dom': 'new-react-dom', + 'react': 'preact-compat' // Keeps predefined aliases that are not overwritten + }); + }); }); describe('addExternals() adds new externals', () => {