diff --git a/lib/Server.js b/lib/Server.js index 5cdeccffaf..536a2b8673 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -32,6 +32,7 @@ const createDomain = require('./utils/createDomain'); const runBonjour = require('./utils/runBonjour'); const routes = require('./utils/routes'); const getSocketServerImplementation = require('./utils/getSocketServerImplementation'); +const setPublicPath = require('./utils/setPublicPath'); const schema = require('./options.json'); // Workaround for node ^8.6.0, ^9.0.0 @@ -58,6 +59,8 @@ class Server { this.compiler = compiler; this.options = options; + setPublicPath(compiler, options); + // Setup default value this.options.contentBase = this.options.contentBase !== undefined diff --git a/lib/utils/createConfig.js b/lib/utils/createConfig.js index 0211561235..84cf7e43a7 100644 --- a/lib/utils/createConfig.js +++ b/lib/utils/createConfig.js @@ -59,19 +59,6 @@ function createConfig(config, argv, { port }) { options.overlay = argv.overlay; } - if (!options.publicPath) { - // eslint-disable-next-line - options.publicPath = - (firstWpOpt.output && firstWpOpt.output.publicPath) || ''; - - if ( - !isAbsoluteUrl(String(options.publicPath)) && - options.publicPath[0] !== '/' - ) { - options.publicPath = `/${options.publicPath}`; - } - } - if (!options.filename && firstWpOpt.output && firstWpOpt.output.filename) { options.filename = firstWpOpt.output && firstWpOpt.output.filename; } diff --git a/lib/utils/setPublicPath.js b/lib/utils/setPublicPath.js new file mode 100644 index 0000000000..597626b597 --- /dev/null +++ b/lib/utils/setPublicPath.js @@ -0,0 +1,24 @@ +'use strict'; + +const isAbsoluteUrl = require('is-absolute-url'); + +function setPublicPath(compiler, options) { + const firstWpOpt = compiler.compilers + ? compiler.compilers[0].options + : compiler.options; + + if (!options.publicPath) { + // eslint-disable-next-line + options.publicPath = + (firstWpOpt.output && firstWpOpt.output.publicPath) || ''; + + if ( + !isAbsoluteUrl(String(options.publicPath)) && + options.publicPath[0] !== '/' + ) { + options.publicPath = `/${options.publicPath}`; + } + } +} + +module.exports = setPublicPath;