41 lines
1.4 KiB
JavaScript
41 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
/* eslint no-param-reassign: 'off' */
|
|
|
|
const createDomain = require('./createDomain');
|
|
|
|
module.exports = function addDevServerEntrypoints(webpackOptions, devServerOptions, listeningApp) {
|
|
if (devServerOptions.inline !== false) {
|
|
// we're stubbing the app in this method as it's static and doesn't require
|
|
// a listeningApp to be supplied. createDomain requires an app with the
|
|
// address() signature.
|
|
const app = listeningApp || {
|
|
address() {
|
|
return { port: devServerOptions.port };
|
|
}
|
|
};
|
|
const domain = createDomain(devServerOptions, app);
|
|
const devClient = [`${require.resolve('../../client/')}?${domain}`];
|
|
|
|
if (devServerOptions.hotOnly) { devClient.push('webpack/hot/only-dev-server'); } else if (devServerOptions.hot) { devClient.push('webpack/hot/dev-server'); }
|
|
|
|
const prependDevClient = (entry) => {
|
|
if (typeof entry === 'function') {
|
|
return () => Promise.resolve(entry()).then(prependDevClient);
|
|
}
|
|
if (typeof entry === 'object' && !Array.isArray(entry)) {
|
|
const entryClone = {};
|
|
Object.keys(entry).forEach((key) => {
|
|
entryClone[key] = devClient.concat(entry[key]);
|
|
});
|
|
return entryClone;
|
|
}
|
|
return devClient.concat(entry);
|
|
};
|
|
|
|
[].concat(webpackOptions).forEach((wpOpt) => {
|
|
wpOpt.entry = prependDevClient(wpOpt.entry);
|
|
});
|
|
}
|
|
};
|