用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中自定义事件实例
Jun 20 NodeJs
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
PHP和NodeJs开发的应用如何共用Session
Apr 16 NodeJs
Nodejs Stream 数据流使用手册
Apr 17 NodeJs
深入nodejs中流(stream)的理解
Mar 27 NodeJs
ubuntu编译nodejs所需的软件并安装
Sep 12 NodeJs
nodejs多版本管理总结
Apr 03 NodeJs
Mac下通过brew安装指定版本的nodejs教程
May 17 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 NodeJs
详解nodejs 配置文件处理方案
Jan 02 NodeJs
nodejs实现聊天机器人功能
Sep 19 NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
Dec 05 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
PHP实现路由映射到指定控制器
2016/08/13 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
js实现列表按字母排序
2020/08/11 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
使用Python生成随机密码的示例分享
2016/02/18 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
python range实例用法分享
2020/02/06 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
采购部岗位职责
2013/11/24 职场文书
书香校园建设方案
2014/05/02 职场文书
公司辞职信模板
2015/05/13 职场文书
五一晚会主持词
2015/07/01 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
golang正则之命名分组方式
2021/04/25 Golang
Python加密与解密模块hashlib与hmac
2022/06/05 Python