设为首页 加入收藏

TOP

利用Node.js进行构建本地
2014-11-24 08:10:15 来源: 作者: 【 】 浏览:1
Tags:利用 Node.js 进行 构建 本地

Node.js是一个基于Google Chrome浏览器v8 java script执行引擎的异步I/O事件驱动的运行平台。直从2009年诞生开始,已经在业界得到了很多的关注,在这里也必要多说,如果你还不清楚的,请移步到Node官网。


在这里我们要讲的是用Node.js来构建本地Build。构建本地Build,我们已经有很多选择,如Ant,Maven,Gradle等。为什么我们还需要Node.js?对于我们的开发中会有一些小的基本自动化构建,如文件的监控(Less编译),java script的压缩,不稳定集成服务代理,快速的集成反馈,文件的迁移…而对于项目来说我并不像引入太多的技术战, Node.js所使用的java script是做web项目开发的一门必备技能,java script作为一门比较容易入门语言,直从第一次接触Node.js,我爱不释手,由于我对java script基础,能够快速使用它,并不需要付出更多的学习成本,而且我感觉在服务端和客户端用同一种语言,在能一定代码重用妙不可言。而且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文件的同步到测试目录。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux/Unix Shell的find用法笔记 下一篇Android微信分享功能实例+demo

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)
·MySQL下载与安装教程 (2025-12-26 13:21:26)
·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)