diff --git a/lib/utils/addEntries.js b/lib/utils/addEntries.js index 501b12e080..7eaac33003 100644 --- a/lib/utils/addEntries.js +++ b/lib/utils/addEntries.js @@ -68,7 +68,14 @@ function addEntries(config, options, server) { Object.keys(originalEntry).forEach((key) => { // entry[key] should be a string here - clone[key] = prependEntry(originalEntry[key], additionalEntries); + const entryDescription = originalEntry[key]; + if (typeof entryDescription === 'object' && entryDescription.import) { + clone[key] = Object.assign({}, entryDescription, { + import: prependEntry(entryDescription.import, additionalEntries), + }); + } else { + clone[key] = prependEntry(entryDescription, additionalEntries); + } }); return clone; diff --git a/test/fixtures/entry-as-descriptor/foo.js b/test/fixtures/entry-as-descriptor/foo.js new file mode 100644 index 0000000000..f88d8b5040 --- /dev/null +++ b/test/fixtures/entry-as-descriptor/foo.js @@ -0,0 +1,3 @@ +'use strict'; + +console.log('i am foo!'); diff --git a/test/fixtures/entry-as-descriptor/webpack.config.js b/test/fixtures/entry-as-descriptor/webpack.config.js new file mode 100644 index 0000000000..32ae8c6cae --- /dev/null +++ b/test/fixtures/entry-as-descriptor/webpack.config.js @@ -0,0 +1,24 @@ +'use strict'; + +module.exports = { + mode: 'development', + context: __dirname, + entry: { + main: { + import: './foo.js', + }, + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.done.tap('webpack-dev-server', (stats) => { + let exitCode = 0; + if (stats.hasErrors()) { + exitCode = 1; + } + setTimeout(() => process.exit(exitCode)); + }); + }, + }, + ], +}; diff --git a/test/server/utils/addEntries.test.js b/test/server/utils/addEntries.test.js index 1bc6a6cef6..a5a375da2a 100644 --- a/test/server/utils/addEntries.test.js +++ b/test/server/utils/addEntries.test.js @@ -5,6 +5,7 @@ const webpack = require('webpack'); const addEntries = require('../../../lib/utils/addEntries'); const config = require('./../../fixtures/simple-config/webpack.config'); const configEntryAsFunction = require('./../../fixtures/entry-as-function/webpack.config'); +const configEntryAsDescriptor = require('./../../fixtures/entry-as-descriptor/webpack.config'); const normalize = (entry) => entry.split(path.sep).join('/'); @@ -290,6 +291,17 @@ describe('addEntries util', () => { expect(typeof webpackOptions.entry === 'function').toBe(true); }); + it('should supports entry as descriptor', () => { + const webpackOptions = Object.assign({}, configEntryAsDescriptor); + const devServerOptions = {}; + + addEntries(webpackOptions, devServerOptions); + + expect(typeof webpackOptions.entry === 'object').toBe(true); + expect(typeof webpackOptions.entry.main === 'object').toBe(true); + expect(Array.isArray(webpackOptions.entry.main.import)).toBe(true); + }); + it('should only prepends devServer entry points to web targets by default', () => { const webpackOptions = [ Object.assign({}, config),