利用Node.js进行构建本地

简介:

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

在这里我们要讲的是用Node.js来构建本地Build。构建本地Build,我们已经有很多选择,如AntMavenGradle等。为什么我们还需要Node.js?对于我们的开发中会有一些小的基本自动化构建,如文件的监控(Less编译)javascript的压缩,不稳定集成服务代理,快速的集成反馈,文件的迁移而对于项目来说我并不像引入太多的技术战, Node.js所使用的javascript是做web项目开发的一门必备技能,javascript作为一门比较容易入门语言,直从第一次接触Node.js,我爱不释手,由于我对Javascript基础,能够快速使用它,并不需要付出更多的学习成本,而且我感觉在服务端和客户端用同一种语言,在能一定代码重用妙不可言。而且Node.js提供了内置的web服务器,简单的文件监听,事件机制等也为做本地Build提供了很好的条件。

1:文件监听

 
  1. var fs = require("fs"); 
  2.  
  3. var exec = require('child_process').exec 
  4.  
  5. var underscore = require("underscore"); 
  6.  
  7. var configs = [ 
  8.  
  9.     {file:/.*\.less/g, command:" dotless.Compiler.exe style.less style.css"
  10.  
  11. ]; 
  12.  
  13. var source = "E:\\Project\\xxx\\style"
  14.  
  15.   
  16.  
  17. String.format = function () { 
  18.  
  19.     var s = arguments[0]; 
  20.  
  21.     for (var i = 0; i < arguments.length - 1; i++) { 
  22.  
  23.         var reg = new RegExp("\\{" + i + "\\}""gm"); 
  24.  
  25.         s = s.replace(reg, arguments[i + 1]); 
  26.  
  27.     } 
  28.  
  29.   
  30.  
  31.     return s; 
  32.  
  33. }; 
  34.  
  35.   
  36.  
  37. (function (fs, exec, underscore) { 
  38.  
  39.     var readFiles = function (dir, done) { 
  40.  
  41.         var results = []; 
  42.  
  43.         fs.readdir(dir, function (err, list) { 
  44.  
  45.             if (err) return done(err); 
  46.  
  47.             var pending = list.length; 
  48.  
  49.             if (!pending) return done(null, results); 
  50.  
  51.             list.forEach(function (file) { 
  52.  
  53.                 file = dir + '/' + file; 
  54.  
  55.                 fs.stat(file, function (err, stat) { 
  56.  
  57.                     if (stat && stat.isDirectory()) { 
  58.  
  59.                         readFiles(file, function (err, res) { 
  60.  
  61.                             results = results.concat(res); 
  62.  
  63.                             if (!--pending) done(null, results); 
  64.  
  65.                         }); 
  66.  
  67.                     } else { 
  68.  
  69.                         results.push(file); 
  70.  
  71.                         if (!--pending) done(null, results); 
  72.  
  73.                     } 
  74.  
  75.                 }); 
  76.  
  77.             }); 
  78.  
  79.         }); 
  80.  
  81.     }; 
  82.  
  83.     var start = function (source, configs) { 
  84.  
  85.         var watch = function (error, list) { 
  86.  
  87.             configs.forEach(function (cmd) { 
  88.  
  89.                 var files = underscore.filter(list, function (n) { 
  90.  
  91.                     return n.match(cmd.file); 
  92.  
  93.                 }); 
  94.  
  95.                 files.forEach(function (file) { 
  96.  
  97.                     fs.watch(file, function (oper, f) { 
  98.  
  99.                         var changeCommand = String.format(cmd.command, f); 
  100.  
  101.                         console.log(String.format("{0} changed,command '{1}' execute...", f, changeCommand)); 
  102.  
  103.                         exec(changeCommand, function (err, stdout, stderr) { 
  104.  
  105.                             console.log(err ? stderr : stdout); 
  106.  
  107.                         }); 
  108.  
  109.                     }); 
  110.  
  111.                 }); 
  112.  
  113.   
  114.  
  115.             }); 
  116.  
  117.         }; 
  118.  
  119.         readFiles(source, watch); 
  120.  
  121.     }; 
  122.  
  123.     return {start:start}; 
  124.  
  125. })(fs, exec, underscore).start(source, configs); 

 

在这里提供的示例是Less的编译,虽然Less本也提供了Node的编译工具和watchr监听工具,但是在项目中我会监听Less文件,却只有编译几个固定的Less引导文件。同样我们可以根据不同的文件执行不同的命令实现一些自动化。如:.js文件的同步到测试目录。

2:文件的合并

如果你用jasmine运行你的Javascript测试,你需要吧js文件的测试文件引入到runner head中,我一直很懒,喜欢一键搞定的感觉。利用node.js的模板引擎。 

   3javascript 产品包压缩

 
  1. var FILE_ENCODING = 'utf-8'
  2.  
  3. function uglify(srcPath, jsMinPath) { 
  4.  
  5.     var uglyfyJS = require('uglify-js'), 
  6.  
  7.        jsp = uglyfyJS.parser, 
  8.  
  9.        pro = uglyfyJS.uglify, 
  10.  
  11.        ast = jsp.parse( _fs.readFileSync(srcPath, FILE_ENCODING) ); 
  12.  
  13.   
  14.  
  15.       ast = pro.ast_mangle(ast); 
  16.  
  17.       ast = pro.ast_a squeeze(ast); 
  18.  
  19.       _fs.writeFileSync(jsMinPath, pro.gen_code(ast), FILE_ENCODING); 
  20.  
  21.     console.log(' '+ jsMinPath +'完成.'); 
  22.  
  23.  
  24. uglify(js/test.js', js/test.min.js'); 

我们可以尽力发挥自己的想象,如本地Build自动运行,快速集成快速反馈;代理服务器,处理不稳定服务的集成,带来稳定的开发。。。

 








 本文转自 破狼 51CTO博客,原文链接:http://blog.51cto.com/whitewolfblog/1139095,如需转载请自行联系原作者


相关文章
|
2月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js:从零开始构建后端服务
【10月更文挑战第42天】在数字时代的浪潮中,掌握一门后端技术对于开发者来说至关重要。Node.js,作为一种基于Chrome V8引擎的JavaScript运行环境,允许开发者使用JavaScript编写服务器端代码,极大地拓宽了前端开发者的技能边界。本文将从Node.js的基础概念讲起,逐步引导读者理解其事件驱动、非阻塞I/O模型的核心原理,并指导如何在实战中应用这些知识构建高效、可扩展的后端服务。通过深入浅出的方式,我们将一起探索Node.js的魅力和潜力,解锁更多可能。
|
2月前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
1月前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
52 12
|
2月前
|
JavaScript NoSQL API
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
|
2月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
65 5
|
2月前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
2月前
|
JSON JavaScript API
深入浅出Node.js:从零开始构建RESTful API
【10月更文挑战第39天】 在数字化时代的浪潮中,API(应用程序编程接口)已成为连接不同软件应用的桥梁。本文将带领读者从零基础出发,逐步深入Node.js的世界,最终实现一个功能完备的RESTful API。通过实践,我们将探索如何利用Node.js的异步特性和强大的生态系统来构建高效、可扩展的服务。准备好迎接代码和概念的碰撞,一起解锁后端开发的新篇章。
|
2月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API
使用JavaScript和Node.js构建简单的RESTful API
|
2月前
|
JavaScript 前端开发 NoSQL
深入浅出:使用Node.js构建RESTful API
【10月更文挑战第35天】在数字时代的浪潮中,后端技术如同海洋中稳固的灯塔,为前端应用提供数据和逻辑支撑。本文旨在通过浅显易懂的方式,带领读者了解如何利用Node.js这一强大的后端平台,搭建一个高效、可靠的RESTful API。我们将从基础概念入手,逐步深入到代码实践,最终实现一个简单的API示例。这不仅是对技术的探索,也是对知识传递方式的一次创新尝试。让我们一起启航,探索Node.js的奥秘,解锁后端开发的无限可能。
|
2月前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。