歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

利用Node.js進行構建本地

Node.js是一個基於Google Chrome浏覽器v8 javascript執行引擎的異步I/O事件驅動的運行平台。直從2009年誕生開始,已經在業界得到了很多的關注,在這裡也必要多說,如果你還不清楚的,請移步到Node官網。

在這裡我們要講的是用Node.js來構建本地Build。構建本地Build,我們已經有很多選擇,如Ant,Maven,Gradle等。為什麼我們還需要Node.js?對於我們的開發中會有一些小的基本自動化構建,如文件的監控(Less編譯),javascript的壓縮,不穩定集成服務代理,快速的集成反饋,文件的遷移…而對於項目來說我並不像引入太多的技術戰, Node.js所使用的javascript是做web項目開發的一門必備技能,javascript作為一門比較容易入門語言,直從第一次接觸Node.js,我愛不釋手,由於我對Javascript基礎,能夠快速使用它,並不需要付出更多的學習成本,而且我感覺在服務端和客戶端用同一種語言,在能一定代碼重用妙不可言。而且Node.js提供了內置的web服務器,簡單的文件監聽,事件機制等也為做本地Build提供了很好的條件。

1:文件監聽

var fs = require("fs");

var exec = require('child_process').exec

var underscore = require("underscore");

var configs = [

{file:/.*\.less/g, command:" dotless.Compiler.exe style.less style.css"}

];

var source = "E:\\Project\\xxx\\style";

 

String.format = function () {

var s = arguments[0];

for (var i = 0; i < arguments.length - 1; i++) {

var reg = new RegExp("\\{" + i + "\\}", "gm");

s = s.replace(reg, arguments[i + 1]);

}

 

return s;

};

 

(function (fs, exec, underscore) {

var readFiles = function (dir, done) {

var results = [];

fs.readdir(dir, function (err, list) {

if (err) return done(err);

var pending = list.length;

if (!pending) return done(null, results);

list.forEach(function (file) {

file = dir + '/' + file;

fs.stat(file, function (err, stat) {

if (stat && stat.isDirectory()) {

readFiles(file, function (err, res) {

results = results.concat(res);

if (!--pending) done(null, results);

});

} else {

results.push(file);

if (!--pending) done(null, results);

}

});

});

});

};

var start = function (source, configs) {

var watch = function (error, list) {

configs.forEach(function (cmd) {

var files = underscore.filter(list, function (n) {

return n.match(cmd.file);

});

files.forEach(function (file) {

fs.watch(file, function (oper, f) {

var changeCommand = String.format(cmd.command, f);

console.log(String.format("{0} changed,command '{1}' execute...", f, changeCommand));

exec(changeCommand, function (err, stdout, stderr) {

console.log(err ? stderr : stdout);

});

});

});

 

});

};

readFiles(source, watch);

};

return {start:start};

})(fs, exec, underscore).start(source, configs);

在這裡提供的示例是Less的編譯,雖然Less本也提供了Node的編譯工具和watchr監聽工具,但是在項目中我會監聽Less文件,卻只有編譯幾個固定的Less引導文件。同樣我們可以根據不同的文件執行不同的命令實現一些自動化。如:.js文件的同步到測試目錄。

Copyright © Linux教程網 All Rights Reserved