123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- 'use strict';
- const webpack = require('webpack');
- const createDomain = require('./createDomain');
- function addEntries(config, options, server) {
- if (options.inline !== false) {
-
-
-
- const app = server || {
- address() {
- return { port: options.port };
- },
- };
-
- const domain = createDomain(options, app);
-
- const sockHost = options.sockHost ? `&sockHost=${options.sockHost}` : '';
-
- const sockPath = options.sockPath ? `&sockPath=${options.sockPath}` : '';
-
- const sockPort = options.sockPort ? `&sockPort=${options.sockPort}` : '';
-
- const clientEntry = `${require.resolve(
- '../../client/'
- )}?${domain}${sockHost}${sockPath}${sockPort}`;
-
- let hotEntry;
- if (options.hotOnly) {
- hotEntry = require.resolve('webpack/hot/only-dev-server');
- } else if (options.hot) {
- hotEntry = require.resolve('webpack/hot/dev-server');
- }
-
- const prependEntry = (originalEntry, additionalEntries) => {
- if (typeof originalEntry === 'function') {
- return () =>
- Promise.resolve(originalEntry()).then((entry) =>
- prependEntry(entry, additionalEntries)
- );
- }
- if (typeof originalEntry === 'object' && !Array.isArray(originalEntry)) {
-
- const clone = {};
- Object.keys(originalEntry).forEach((key) => {
-
- 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;
- }
-
-
-
- const entriesClone = additionalEntries.slice(0);
- [].concat(originalEntry).forEach((newEntry) => {
- if (!entriesClone.includes(newEntry)) {
- entriesClone.push(newEntry);
- }
- });
- return entriesClone;
- };
-
-
-
- const checkInject = (option, _config, defaultValue) => {
- if (typeof option === 'boolean') return option;
- if (typeof option === 'function') return option(_config);
- return defaultValue;
- };
-
- [].concat(config).forEach((config) => {
-
- const webTarget = [
- 'web',
- 'webworker',
- 'electron-renderer',
- 'node-webkit',
- undefined,
- null,
- ].includes(config.target);
-
- const additionalEntries = checkInject(
- options.injectClient,
- config,
- webTarget
- )
- ? [clientEntry]
- : [];
- if (hotEntry && checkInject(options.injectHot, config, true)) {
- additionalEntries.push(hotEntry);
- }
- config.entry = prependEntry(config.entry || './src', additionalEntries);
- if (options.hot || options.hotOnly) {
- config.plugins = config.plugins || [];
- if (
- !config.plugins.find(
-
-
- (plugin) => plugin.constructor.name === 'HotModuleReplacementPlugin'
- )
- ) {
- config.plugins.push(new webpack.HotModuleReplacementPlugin());
- }
- }
- });
- }
- }
- module.exports = addEntries;
|