watch.js (2071B)
1 const path = require('path'); 2 const chokidar = require('chokidar'); 3 const multimatch = require('multimatch'); 4 const { dirs, jsFiles, ignoreMask, copyDirs, symlinkFiles } = require('./config'); 5 const { onSuccess, onError, getSignatures, writeSignatures, cleanUp, formatDirsForMatcher } = require('./utils'); 6 const getJS = require('./js'); 7 const getSass = require('./sass'); 8 const getCopy = require('./copy'); 9 const getSymlinks = require('./symlinks'); 10 11 12 const ROOT = path.resolve(__dirname, '..'); 13 const source = [ 14 'chrome', 15 'components', 16 'defaults', 17 'resource', 18 'scss', 19 'test', 20 'styles', 21 'translators', 22 'scss', 23 'chrome/**', 24 'components/**', 25 'defaults/**', 26 'resource/**', 27 'scss/**', 28 'test/**', 29 'styles/**', 30 'translators/**', 31 'scss/**' 32 ]; 33 34 const symlinks = symlinkFiles 35 .concat(dirs.map(d => `${d}/**`)) 36 .concat([`!${formatDirsForMatcher(dirs)}/**/*.js`]) 37 .concat([`!${formatDirsForMatcher(copyDirs)}/**`]); 38 39 var signatures; 40 41 process.on('SIGINT', () => { 42 writeSignatures(signatures); 43 process.exit(); 44 }); 45 46 function getWatch() { 47 let watcher = chokidar.watch(source, { cwd: ROOT }) 48 .on('change', async (path) => { 49 try { 50 if (multimatch(path, jsFiles).length && !multimatch(path, ignoreMask).length) { 51 onSuccess(await getJS(path, { ignore: ignoreMask }, signatures)); 52 } else if (multimatch(path, 'scss/*.scss').length) { 53 onSuccess(await getSass(path, {}, signatures)); 54 } else if (multimatch(path, copyDirs.map(d => `${d}/**`)).length) { 55 onSuccess(await getCopy(path, {}, signatures)); 56 } else if (multimatch(path, symlinks).length) { 57 onSuccess(await getSymlinks(path, { nodir: true }, signatures)); 58 } 59 onSuccess(await cleanUp(signatures)); 60 } catch (err) { 61 onError(err); 62 } 63 64 }) 65 .on('unlink', async () => { 66 const signatures = await getSignatures(); 67 onSuccess(await cleanUp(signatures)); 68 }); 69 70 watcher.add(source); 71 console.log('Watching files for changes...'); 72 } 73 74 module.exports = getWatch; 75 76 if (require.main === module) { 77 (async () => { 78 signatures = await getSignatures(); 79 getWatch(); 80 })(); 81 }