| /** |
| * ------------------------------------------------------------------------ |
| * Usage: |
| * |
| * ```shell |
| * node watch.js --env dev |
| * node watch.js --env asf |
| * node watch.js --env echartsjs |
| * # Check `./config` to see the available env |
| * ``` |
| * ------------------------------------------------------------------------ |
| */ |
| |
| var path = require('path'); |
| var fs = require('fs'); |
| var argv = require('yargs').argv; |
| |
| function initEnv() { |
| var envType = argv.env; |
| var isDev = argv.dev != null || argv.debug != null || envType === 'debug'; |
| |
| if (isDev) { |
| console.warn('============================='); |
| console.warn('!!! THIS IS IN DEV MODE !!!'); |
| console.warn('============================='); |
| envType = 'dev'; |
| } |
| |
| if (!envType) { |
| throw new Error('--env MUST be specified'); |
| } |
| |
| return envType; |
| } |
| |
| var envType = initEnv(); |
| |
| var docSrcDirZH = path.join(__dirname, '/zh'); |
| var docSrcDirEN = path.join(__dirname, '/en'); |
| |
| var watchDirs = []; |
| getAllDirs(docSrcDirZH, watchDirs); |
| getAllDirs(docSrcDirEN, watchDirs); |
| |
| var timer; |
| |
| watchDirs.forEach(function (p) { |
| fs.watch(p, onChange); |
| }); |
| |
| function getAllDirs(rootDir, result) { |
| if (fs.statSync(rootDir).isDirectory()) { |
| result.push(rootDir); |
| |
| fs.readdirSync(rootDir).forEach(function(file, index) { |
| getAllDirs(path.join(rootDir, file), result); |
| }); |
| } |
| } |
| |
| function onChange(event) { |
| if (event === 'change') { |
| console.log('File changed, auto compile ...'); |
| |
| if (timer) { |
| clearTimeout(timer); |
| } |
| |
| timer = setTimeout(function () { |
| execBuild(); // Writing may be not finished yet, and throttle. |
| }, 1000); |
| } |
| } |
| |
| function execBuild() { |
| require('child_process').exec( |
| 'node build.js --env ' + envType, |
| function (error, stdout, stderr) { |
| if (error !== null) { |
| console.log('exec error: ' + error); |
| } |
| console.log(stdout); |
| } |
| ); |
| } |