nodemon-webpack-plugin
Version:
A webpack plugin that starts and reloads a server using Nodemon.
94 lines (72 loc) • 4.1 kB
JavaScript
;
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
/* eslint-disable no-console */
var nodemon = require('nodemon');
var _require = require('./webpack-utils'),
getOutputFileMeta = _require.getOutputFileMeta;
module.exports = /*#__PURE__*/function () {
function _class(nodemonOptions) {
_classCallCheck(this, _class);
this.nodemonOptions = nodemonOptions;
this.isWebpackWatching = false;
this.isNodemonRunning = false;
}
_createClass(_class, [{
key: "apply",
value: function apply(compiler) {
var _this = this;
var OnAfterEmit = function OnAfterEmit(compilation, callback) {
if (_this.isWebpackWatching) {
if (compilation.errors.length > 0) {
console.log('[nodemon-webpack-plugin]: Compilation error.');
} else if (!_this.isNodemonRunning) {
var outputFile = getOutputFileMeta(compilation, compiler.outputPath);
_this.startMonitoring(outputFile);
}
}
callback();
};
var onWatchRun = function onWatchRun(comp, callback) {
_this.isWebpackWatching = true;
callback();
};
var plugin = {
name: 'nodemon-webpack-plugin"'
};
if (compiler.hooks) {
compiler.hooks.afterEmit.tapAsync(plugin, OnAfterEmit);
compiler.hooks.watchRun.tapAsync(plugin, onWatchRun);
} else {
compiler.plugin('after-emit', OnAfterEmit);
compiler.plugin('watch-run', onWatchRun);
}
}
}, {
key: "startMonitoring",
value: function startMonitoring(relativeFileName) {
var nodemonOptionsDefaults = {
script: relativeFileName,
watch: relativeFileName
};
var nodemonOptions = _objectSpread(_objectSpread({}, nodemonOptionsDefaults), this.nodemonOptions);
var monitor = nodemon(nodemonOptions);
monitor.on('log', function (_ref) {
var colouredMessage = _ref.colour;
return console.log(colouredMessage);
});
this.isNodemonRunning = true; // Ensure we exit nodemon when webpack exists.
process.once('exit', function () {
monitor.emit('exit');
}); // Ensure Ctrl-C triggers exit.
process.once('SIGINT', function () {
process.exit(0);
});
}
}]);
return _class;
}();