加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

借助Node.js进行构建本地

发布时间:2021-11-21 20:36:35 所属栏目:教程 来源:互联网
导读:Node.js是一个基于Google Chrome浏览器v8 Javascript执行引擎的异步I/O事件驱动的运行平台。直从2009年诞生开始,已经在业界得到了很多的关注,在这里也必要多说,如果你还不清楚的,请移步到Node官网。 在这里我们要讲的是用Node.js来构建本地Build。构建本

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:Projectxxxstyle";
 
 
 
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文件的同步到测试目录。
 
 

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读