mirror of https://github.com/embarklabs/embark.git
feat(modules/watcher): introduce watcher plugin module
As part of a bigger refactoring to make Embark's build pipeline pluggable, this commit moves the watcher into its own plugin module so it can be consumed via Embark's event bus. It also introduces new command handlers for all watcher related APIs respectively: - watcher:start - watcher:stop - watcher:restart
This commit is contained in:
parent
081b7eee89
commit
71e92358a8
|
@ -210,11 +210,9 @@ class Engine {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fileWatchService(_options) {
|
fileWatchService() {
|
||||||
this.events.emit("status", "Watching for changes");
|
this.registerModule('watcher');
|
||||||
const Watch = require('../pipeline/watch.js');
|
this.events.request('watcher:start');
|
||||||
this.watch = new Watch({logger: this.logger, events: this.events});
|
|
||||||
this.watch.start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
webServerService() {
|
webServerService() {
|
||||||
|
|
|
@ -3,7 +3,7 @@ const fs = require('../../core/fs');
|
||||||
const ProcessWrapper = require('../../core/processes/processWrapper');
|
const ProcessWrapper = require('../../core/processes/processWrapper');
|
||||||
const webpack = require('webpack');
|
const webpack = require('webpack');
|
||||||
const writeFile = require('util').promisify(require('fs').writeFile);
|
const writeFile = require('util').promisify(require('fs').writeFile);
|
||||||
const {errorMessage, recursiveMerge} = require('../utils/utils');
|
const {errorMessage, recursiveMerge} = require('../../utils/utils');
|
||||||
|
|
||||||
// TODO: refactor into lib/core/config once pipeline is a proper embark module
|
// TODO: refactor into lib/core/config once pipeline is a proper embark module
|
||||||
const defaultPipelineConfig = {
|
const defaultPipelineConfig = {
|
||||||
|
|
|
@ -1,15 +1,23 @@
|
||||||
let chokidar = require('chokidar');
|
let chokidar = require('chokidar');
|
||||||
let path = require('path');
|
let path = require('path');
|
||||||
|
|
||||||
let fs = require('../core/fs.js');
|
let fs = require('../../core/fs.js');
|
||||||
|
|
||||||
|
const DAPP_PIPELINE_CONFIG_FILE = 'pipeline.js';
|
||||||
|
const DAPP_WEBPACK_CONFIG_FILE = 'webpack.config.js';
|
||||||
|
const DAPP_BABEL_LOADER_OVERRIDES_CONFIG_FILE = 'babel-loader-overrides.js';
|
||||||
|
|
||||||
// TODO: this should be receiving the config object not re-reading the
|
// TODO: this should be receiving the config object not re-reading the
|
||||||
// embark.json file
|
// embark.json file
|
||||||
class Watch {
|
class Watcher {
|
||||||
constructor(options) {
|
constructor(embark) {
|
||||||
this.logger = options.logger;
|
this.logger = embark.logger;
|
||||||
this.events = options.events;
|
this.events = embark.events;
|
||||||
this.fileWatchers = [];
|
this.fileWatchers = [];
|
||||||
|
|
||||||
|
this.events.setCommandHandler('watcher:start', () => this.start());
|
||||||
|
this.events.setCommandHandler('watcher:stop', () => this.stop());
|
||||||
|
this.events.setCommandHandler('watcher:restart', () => this.restart());
|
||||||
}
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
|
@ -30,6 +38,10 @@ class Watch {
|
||||||
self.logger.trace('ready to watch contract config changes');
|
self.logger.trace('ready to watch contract config changes');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.watchPipelineConfig(embarkConfig, function () {
|
||||||
|
self.logger.trace('ready to watch pipeline config changes');
|
||||||
|
});
|
||||||
|
|
||||||
this.watchWebserverConfig(embarkConfig, function () {
|
this.watchWebserverConfig(embarkConfig, function () {
|
||||||
self.logger.trace('ready to watch webserver config changes');
|
self.logger.trace('ready to watch webserver config changes');
|
||||||
});
|
});
|
||||||
|
@ -150,6 +162,25 @@ class Watch {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
watchPipelineConfig(embarkConfig, callback) {
|
||||||
|
let filesToWatch = [
|
||||||
|
fs.dappPath('', DAPP_WEBPACK_CONFIG_FILE),
|
||||||
|
fs.dappPath('', DAPP_BABEL_LOADER_OVERRIDES_CONFIG_FILE)
|
||||||
|
];
|
||||||
|
|
||||||
|
if (typeof embarkConfig.config === 'object' && embarkConfig.config.pipeline) {
|
||||||
|
filesToWatch.push(embarkConfig.config.pipeline);
|
||||||
|
} else if (typeof embarkConfig.config === 'string') {
|
||||||
|
filesToWatch.push(fs.dappPath(embarkConfig.config, DAPP_PIPELINE_CONFIG_FILE));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.watchFiles(filesToWatch, (eventName, path) => {
|
||||||
|
this.logger.info(`${eventName}: ${path}`);
|
||||||
|
this.events.emit('file-' + eventName, 'config', path);
|
||||||
|
this.events.emit('file-event', 'config', path);
|
||||||
|
}, callback);
|
||||||
|
}
|
||||||
|
|
||||||
watchFiles(files, changeCallback, doneCallback) {
|
watchFiles(files, changeCallback, doneCallback) {
|
||||||
this.logger.trace('watchFiles');
|
this.logger.trace('watchFiles');
|
||||||
this.logger.trace(files);
|
this.logger.trace(files);
|
||||||
|
@ -172,4 +203,5 @@ class Watch {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Watch;
|
module.exports = Watcher;
|
||||||
|
|
Loading…
Reference in New Issue