diff options
Diffstat (limited to 'node_modules/webpack-serve/index.js')
| -rw-r--r-- | node_modules/webpack-serve/index.js | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/node_modules/webpack-serve/index.js b/node_modules/webpack-serve/index.js new file mode 100644 index 00000000..7e0638a6 --- /dev/null +++ b/node_modules/webpack-serve/index.js @@ -0,0 +1,90 @@ +const updateNotifier = require('update-notifier'); +const webpack = require('webpack'); +const weblog = require('webpack-log'); + +const eventbus = require('./lib/bus'); +const getOptions = require('./lib/options'); +const getServer = require('./lib/server'); +const WebpackServeError = require('./lib/WebpackServeError'); +const pkg = require('./package.json'); + +module.exports = (opts) => { + updateNotifier({ pkg }).notify(); + + process.env.WEBPACK_SERVE = true; + + return getOptions(opts) + .then((results) => { + const { options, configs } = results; + const log = weblog({ name: 'serve', id: 'webpack-serve' }); + + options.bus = eventbus(options); + const { bus } = options; + + if (!options.compiler) { + try { + options.compiler = webpack(configs.length > 1 ? configs : configs[0]); + } catch (e) { + throw new WebpackServeError( + `An error was thrown while initializing Webpack\n ${e.toString()}` + ); + } + } + + const compilers = options.compiler.compilers || [options.compiler]; + for (const comp of compilers) { + comp.hooks.compile.tap('WebpackServe', () => { + bus.emit('build-started', { compiler: comp }); + }); + + comp.hooks.done.tap('WebpackServe', (stats) => { + const json = stats.toJson(); + if (stats.hasErrors()) { + bus.emit('compiler-error', { json, compiler: comp }); + } + + if (stats.hasWarnings()) { + bus.emit('compiler-warning', { json, compiler: comp }); + } + + bus.emit('build-finished', { stats, compiler: comp }); + }); + } + + const { close, server, start } = getServer(options); + + start(options); + + let closing = false; + const exit = (signal) => { + if (!closing) { + closing = true; + close(() => { + log.info(`Process Ended via ${signal}`); + server.kill(); + process.exit(0); + }); + } + }; + + for (const signal of ['SIGINT', 'SIGTERM']) { + process.on(signal, () => exit(signal)); + } + + process.on('exit', exit); + + return Object.freeze({ + close, + compiler: options.compiler, + on(...args) { + options.bus.on(...args); + }, + options, + }); + }) + .catch((err) => { + // eslint-disable-next-line no-console + console.log('An error was thrown while starting webpack-serve.\n ', err); + throw err; + }); +}; |
