用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中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
PHP和NodeJs开发的应用如何共用Session
Apr 16 NodeJs
nodejs实现遍历文件夹并统计文件大小
May 28 NodeJs
在windows上用nodejs搭建静态文件服务器的简单方法
Aug 11 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
详解NodeJs开发微信公众号
May 25 NodeJs
nodejs搭建本地服务器并访问文件操作示例
May 11 NodeJs
nodejs各种姿势断点调试的方法
Jun 18 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
thinkphp循环结构用法实例
2014/11/24 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
php报错502badgateway解决方法
2019/10/11 PHP
js控制框架刷新
2008/08/01 Javascript
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
webpack4简单入门实例
2018/09/06 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
在Django的模板中使用认证数据的方法
2015/07/23 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
Python sorted排序方法如何实现
2020/03/31 Python
酒店销售主管岗位职责
2014/01/04 职场文书
家长给幼儿园的表扬信
2014/01/09 职场文书
个人党性剖析材料
2014/02/03 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
大学四年个人自我小结
2014/03/05 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
大学活动总结模板
2014/07/10 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
投资意向协议书
2015/01/29 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python