use cheap-watch instead of chokidar (#364)

This commit is contained in:
Rich Harris
2018-08-19 18:52:01 -04:00
parent 611017fd28
commit f9bf23dc43
3 changed files with 314 additions and 84 deletions

331
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -19,7 +19,6 @@
"test": "test" "test": "test"
}, },
"dependencies": { "dependencies": {
"chokidar": "^2.0.4",
"html-minifier": "^3.5.16", "html-minifier": "^3.5.16",
"source-map-support": "^0.5.6", "source-map-support": "^0.5.6",
"tslib": "^1.9.1" "tslib": "^1.9.1"
@@ -30,6 +29,7 @@
"@types/mocha": "^5.2.5", "@types/mocha": "^5.2.5",
"@types/node": "^10.7.1", "@types/node": "^10.7.1",
"@types/rimraf": "^2.0.2", "@types/rimraf": "^2.0.2",
"cheap-watch": "^0.3.0",
"compression": "^1.7.1", "compression": "^1.7.1",
"cookie": "^0.3.1", "cookie": "^0.3.1",
"devalue": "^1.0.4", "devalue": "^1.0.4",

View File

@@ -119,21 +119,30 @@ class Watcher extends EventEmitter {
this.dev_server = new DevServer(dev_port); this.dev_server = new DevServer(dev_port);
this.filewatchers.push( this.filewatchers.push(
watch_files(locations.routes(), ['add', 'unlink'], () => { watch_dir(
const routes = create_routes(); locations.routes(),
create_main_manifests({ routes, dev_port }); ({ path: file, stats }) => {
if (stats.isDirectory()) {
try { return path.basename(file)[0] !== '_';
}
return true;
},
() => {
const routes = create_routes(); const routes = create_routes();
create_main_manifests({ routes, dev_port }); create_main_manifests({ routes, dev_port });
} catch (err) {
this.emit('error', <events.ErrorEvent>{
message: err.message
});
}
}),
watch_files(`${locations.app()}/template.html`, ['change'], () => { try {
const routes = create_routes();
create_main_manifests({ routes, dev_port });
} catch (err) {
this.emit('error', <events.ErrorEvent>{
message: err.message
});
}
}
),
fs.watch(`${locations.app()}/template.html`, () => {
this.dev_server.send({ this.dev_server.send({
action: 'reload' action: 'reload'
}); });
@@ -453,24 +462,32 @@ class DevServer {
function noop() {} function noop() {}
function watch_files(pattern: string, events: string[], callback: () => void) { function watch_dir(
let watcher; dir: string,
filter: ({ path, stats }: { path: string, stats: fs.Stats }) => boolean,
callback: () => void
) {
let watch;
let closed = false;
import('chokidar').then(({ default: chokidar }) => { import('cheap-watch').then(CheapWatch => {
if (closed) return; if (closed) return;
watcher = chokidar.watch(pattern, { watch = new CheapWatch({ dir, filter, debounce: 50 });
persistent: true,
ignoreInitial: true, watch.on('+', ({ isNew }) => {
disableGlobbing: true if (isNew) callback();
}); });
events.forEach(event => { watch.on('-', callback);
watcher.on(event, callback);
}); watch.init();
}); });
return { return {
close: () => watcher && watcher.close() close: () => {
if (watch) watch.close();
closed = true;
}
}; };
} }