2015/10/19

watch.js

現在處於 node.js 幼幼班的階段,變覺得 node.js 的發明實在太方便,尤其是自己對 JavaScript 有一定的熟悉度所以學起來很愉悅,今天的 case 是,之前有介紹過 r.js,未來會朝向所有相關的 js 檔案全部壓成一個減少 server request,在開發階段會面臨一個問題就是東西有改動就要 compile,每次都要手動執行也挺累的,今天看到一個套件名為 watch,他可以偵測資料夾內檔案新增、修改、刪除的事件,於是寫了個 script 來幫我監聽並且做 auto compile。

~/watch/project.js

var watch = require('watch');
var path = require('path');
var exec = require('child_process').exec;
var monitorPath = '/var/www/project/assets/js/';

watch.createMonitor(monitorPath + 'src/', function(monitor) {
    monitor.on('changed', function(f) {
        var baseName = path.basename(f);
        var body = path.basename(f, '.js');
        var ext = path.extname(f);

        if (ext === '.js') {
            var command = 'r.js -o ' + monitorPath + 'build.js name=src/' + body + ' out=' + monitorPath + 'build/' + baseName + ' optimize=none';

            console.log('start compile ' + baseName);
            exec(command, function(error, stdout) {
                console.log(stdout);
            });
        }
    });
});

我在根目錄下面建立了一個 watch 的目錄,日後有新的專案的話就會多建一個檔案來監控,東西都設定完成後,只要在該目錄下 node project.js,watch 就會自動啟動了,我這邊編譯先把 uglifying 關掉,因為他會影響編譯速度,如果檔案已經確定是 final 不會變動的話,在去手動執行有 uglifying 的指令,如果在 windows 遇到錯誤訊息,只要把 command 改成 r.js.cmd 就可以了。

沒有留言: