用nodejs写的一个简单项目打包工具


Posted in NodeJs onMay 11, 2013

项目的模块加载和定义部分代码是这样的:

XX.define('ns',['tool/cookie'],function(){
});
//或者
XX.define('ns.ns2','tool/cookie,tool/abc',function(){
})
//或者
XX.define('ns',function(){
})

所用到的js打包工具就是扫描文件,然后匹配出来需要加载的模块,然后先加载模块代码。
主要的nodejs打包工具代码如下:

//通用模块
var Util = require('util'),
    FS = require('fs'),
    getDeps = require('./getDeps'),
    Uglify = require('./uglify/uglify-js'),
    removeBOMChar = require('./removeBOM').removeBOMChar,
    PATH =require('path');var packagedObj = {};//是否已经打包过
module.exports = function(filePath, rootPath, opts){
    opts = opts || {};
    var str = jscombo(filePath,rootPath);
    if(opts.unzip){
        return str;
    }else{
        return Uglify(str);   
    }
};
function jscombo(filePaths, rootPath){
    if(Util.isArray(filePaths)){
        return filePaths.map(function(filePath){            
            filePath = PATH.join(rootPath,filePath);
            //只打包一次
            if(packagedObj[filePath]){
                return '';
            }
            packagedObj[filePath] = 1;
            //是否存在
            if(FS.existsSync(filePath)){
                //异步读取内容
                var str = FS.readFileSync(filePath, 'utf-8');
                //移出BOM头
                str = removeBOMChar(str);
                var result = getDeps(str, rootPath);
                var content = result.content;
                content = '//'+filePath+'\n'+content;
                //递归打包
                if(result.list){
                    return jscombo(result.list, rootPath) + content;
                }                
                //返回内容
                return content;
            }else{
                //文件不存在错误信息
                console.error('jsCombo Error: ' + filePath + ' does not exsist! the path is:'+rootPath);
                return ';alert("' + filePath + ' does not exsist!");';
            }            
        }).join(';\n');
    }else{
        return jscombo([filePaths],rootPath);
    }
}

对于nodejs之前一直没认真学习,都是边查文档,编写的,所以代码很青涩~

NodeJs 相关文章推荐
用nodejs访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
nodejs中实现sleep功能实例
Mar 24 NodeJs
nodejs爬虫抓取数据乱码问题总结
Jul 03 NodeJs
Nodejs的express使用教程
Nov 23 NodeJs
详解nodejs 文本操作模块-fs模块(四)
Dec 22 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
Nodejs中使用captchapng模块生成图片验证码
May 18 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
详解nodejs 配置文件处理方案
Jan 02 NodeJs
Nodejs对postgresql基本操作的封装方法
Feb 20 NodeJs
nodejs简单抓包工具使用详解
Aug 23 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
nodejs教程 安装express及配置app.js文件的详细步骤
May 11 #NodeJs
nodejs中exports与module.exports的区别详细介绍
Jan 14 #NodeJs
nodejs的require模块(文件模块/核心模块)及路径介绍
Jan 14 #NodeJs
windows系统下简单nodejs安装及环境配置
Jan 08 #NodeJs
NodeJs中的非阻塞方法介绍
Jun 05 #NodeJs
nodejs win7下安装方法
May 24 #NodeJs
NodeJS的模块写法入门(实例代码)
Mar 07 #NodeJs
You might like
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
php输入数据统一类实例
2015/02/23 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
python数据归一化及三种方法详解
2019/08/06 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
大学活动总结范文
2014/04/29 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
只用50行Python代码爬取网络美女高清图片
2021/06/02 Python
HTML+JS实现在线朗读器
2022/02/15 Javascript
各种货币符号快捷输入
2022/02/17 杂记
MySQL中正则表达式(REGEXP)使用详解
2022/07/07 MySQL