diff --git a/packages/cli/bin/build.js b/packages/cli/bin/build.js index 51108a33d..383be9b59 100644 --- a/packages/cli/bin/build.js +++ b/packages/cli/bin/build.js @@ -19,6 +19,10 @@ function build(config, options) { // Initiate Pattern Lab core with the config const patternLab = pl(config); + if (options && options.watch) { + config.watch = options.watch; + } + /** * Check whether a flag was passed for build * 1. Build only patterns @@ -31,7 +35,7 @@ function build(config, options) { } else { // 2 debug(`build: Building your project now into ${config.paths.public.root}`); - return patternLab.build(config.cleanPublic); + return patternLab.build(config); } } diff --git a/packages/cli/bin/patternlab.js b/packages/cli/bin/patternlab.js index a76468994..80c12acfb 100755 --- a/packages/cli/bin/patternlab.js +++ b/packages/cli/bin/patternlab.js @@ -20,8 +20,7 @@ log.on('patternlab.error', err => console.log(err)); // eslint-disable-line log.on('patternlab.info', msg => console.log(msg)); // eslint-disable-line // Conditionally register verbose logging -const verboseLogs = verbose => - log.on('patternlab.debug', msg => console.log(msg)); // eslint-disable-line +const verboseLogs = () => log.on('patternlab.debug', msg => console.log(msg)); // eslint-disable-line // Conditionally unregister all logging const silenceLogs = () => { @@ -58,7 +57,7 @@ cli .alias('compile') .description('Build Pattern Lab. Optionally (re-)build only the patterns') .option('-p, --patterns-only', 'Whether to only build patterns') - .option('--no-watch', 'Start watching for changes') + .option('--watch', 'Start watching for changes') .action(build); /** diff --git a/packages/core/src/lib/patternlab.js b/packages/core/src/lib/patternlab.js index cd89c64c4..d9d1f5acf 100644 --- a/packages/core/src/lib/patternlab.js +++ b/packages/core/src/lib/patternlab.js @@ -307,6 +307,11 @@ module.exports = class PatternLab { // dive once to perform iterative populating of patternlab object processAllPatternsIterative(patterns_dir) { const self = this; + + // before updating the patterns has to be reset, otherwise + // deleted pattern would still be present in the patterns array + this.patterns = []; + const promiseAllPatternFiles = new Promise(function(resolve) { dive( patterns_dir, diff --git a/packages/core/src/lib/watchPatternLabFiles.js b/packages/core/src/lib/watchPatternLabFiles.js index f5ab0c1aa..6af0bcbb8 100644 --- a/packages/core/src/lib/watchPatternLabFiles.js +++ b/packages/core/src/lib/watchPatternLabFiles.js @@ -131,8 +131,31 @@ const watchPatternLabFiles = ( file: p, } ); + }) + // the watcher does not react on unlink and unlinkDir + // events, so patterns are never removed + .on('unlink', async p => { + patternlab.graph.sync(); + patternlab.graph.upgradeVersion(); + await pluginMananger.raiseEvent( + patternlab, + events.PATTERNLAB_PATTERN_CHANGE, + { + file: p, + } + ); + }) + .on('unlinkDir', async p => { + patternlab.graph.sync(); + patternlab.graph.upgradeVersion(); + await pluginMananger.raiseEvent( + patternlab, + events.PATTERNLAB_PATTERN_CHANGE, + { + file: p, + } + ); }); - patternlab.watchers[patternWatchPath] = patternWatcher; });