用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 后缀名判断限制代码
Mar 31 NodeJs
轻松创建nodejs服务器(9):实现非阻塞操作
Dec 18 NodeJs
Nodejs为什么选择javascript为载体语言
Jan 13 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
nodejs对express中next函数的一些理解
Sep 08 NodeJs
详解使用PM2管理nodejs进程
Oct 24 NodeJs
使用koa-log4管理nodeJs日志笔记的使用方法
Nov 30 NodeJs
nodejs基础之buffer缓冲区用法分析
Dec 26 NodeJs
详解nodejs http请求相关总结
Mar 31 NodeJs
nodejs文件夹深层复制功能
Sep 03 NodeJs
nodejs dgram模块广播+组播的实现示例
Nov 04 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
Js基础学习资料
2010/11/23 Javascript
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
原生JS实现九宫格抽奖效果
2017/04/01 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
Python实现CET查分的方法
2015/03/10 Python
初步解析Python下的多进程编程
2015/04/28 Python
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
tensorflow更改变量的值实例
2018/07/30 Python
python 错误处理 assert详解
2020/04/20 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
马云的职业生涯规划之路
2014/01/01 职场文书
工作表扬信的范文
2014/01/10 职场文书
人事部岗位职责范本
2014/03/05 职场文书
导师鉴定意见
2015/06/05 职场文书
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA