You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							73 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							73 lines
						
					
					
						
							2.1 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
/* eslint-disable | 
						|
  no-shadow, | 
						|
  no-undefined | 
						|
*/ | 
						|
const webpack = require('webpack'); | 
						|
const addEntries = require('./addEntries'); | 
						|
const getSocketClientPath = require('./getSocketClientPath'); | 
						|
 | 
						|
function updateCompiler(compiler, options) { | 
						|
  if (options.inline !== false) { | 
						|
    const findHMRPlugin = (config) => { | 
						|
      if (!config.plugins) { | 
						|
        return undefined; | 
						|
      } | 
						|
 | 
						|
      return config.plugins.find( | 
						|
        (plugin) => plugin.constructor === webpack.HotModuleReplacementPlugin | 
						|
      ); | 
						|
    }; | 
						|
 | 
						|
    const compilers = []; | 
						|
    const compilersWithoutHMR = []; | 
						|
    let webpackConfig; | 
						|
    if (compiler.compilers) { | 
						|
      webpackConfig = []; | 
						|
      compiler.compilers.forEach((compiler) => { | 
						|
        webpackConfig.push(compiler.options); | 
						|
        compilers.push(compiler); | 
						|
        if (!findHMRPlugin(compiler.options)) { | 
						|
          compilersWithoutHMR.push(compiler); | 
						|
        } | 
						|
      }); | 
						|
    } else { | 
						|
      webpackConfig = compiler.options; | 
						|
      compilers.push(compiler); | 
						|
      if (!findHMRPlugin(compiler.options)) { | 
						|
        compilersWithoutHMR.push(compiler); | 
						|
      } | 
						|
    } | 
						|
 | 
						|
    // it's possible that we should clone the config before doing | 
						|
    // this, but it seems safe not to since it actually reflects | 
						|
    // the changes we are making to the compiler | 
						|
    // important: this relies on the fact that addEntries now | 
						|
    // prevents duplicate new entries. | 
						|
    addEntries(webpackConfig, options); | 
						|
    compilers.forEach((compiler) => { | 
						|
      const config = compiler.options; | 
						|
      compiler.hooks.entryOption.call(config.context, config.entry); | 
						|
 | 
						|
      const providePlugin = new webpack.ProvidePlugin({ | 
						|
        __webpack_dev_server_client__: getSocketClientPath(options), | 
						|
      }); | 
						|
      providePlugin.apply(compiler); | 
						|
    }); | 
						|
 | 
						|
    // do not apply the plugin unless it didn't exist before. | 
						|
    if (options.hot || options.hotOnly) { | 
						|
      compilersWithoutHMR.forEach((compiler) => { | 
						|
        // addDevServerEntrypoints above should have added the plugin | 
						|
        // to the compiler options | 
						|
        const plugin = findHMRPlugin(compiler.options); | 
						|
        if (plugin) { | 
						|
          plugin.apply(compiler); | 
						|
        } | 
						|
      }); | 
						|
    } | 
						|
  } | 
						|
} | 
						|
 | 
						|
module.exports = updateCompiler;
 | 
						|
 |