摘要:构建本地Build,我们已经有很多选择,如Ant,Maven,Gradle等。为什么我们还需要Node.js?Node.js提供了内置的web服务器,简单的文件监听,事件机制等也为做本地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提供了内置的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文件的同步到测试目录。
2:文件的合并
如果你用jasmine运行你的Javascript测试,你需要吧js文件的测试文件引入到runner head中,我一直很懒,喜欢一键搞定的感觉。利用node.js的模板引擎。
3:javascript 产品包压缩
var FILE_ENCODING = 'utf-8'; function uglify(srcPath, jsMinPath) { var uglyfyJS = require('uglify-js'), jsp = uglyfyJS.parser, pro = uglyfyJS.uglify, ast = jsp.parse( _fs.readFileSync(srcPath, FILE_ENCODING) ); ast = pro.ast_mangle(ast); ast = pro.ast_a squeeze(ast); _fs.writeFileSync(jsMinPath, pro.gen_code(ast), FILE_ENCODING); console.log(' '+ jsMinPath +'完成.'); } uglify(js/test.js', js/test.min.js');
我们可以尽力发挥自己的想象,如本地Build自动运行,快速集成快速反馈;代理服务器,处理不稳定服务的集成,带来稳定的开发。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注WEB前端Node.js频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号