用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进程管理模块forever详解
Jun 01 NodeJs
nodejs教程之异步I/O
Nov 21 NodeJs
nodejs URL模块操作URL相关方法介绍
Mar 03 NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
深入学习nodejs中的async模块的使用方法
Jul 12 NodeJs
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
Sep 06 NodeJs
nodejs使用redis作为缓存介质实现的封装缓存类示例
Feb 07 NodeJs
nodejs更新package.json中的dependencies依赖到最新版本的方法
Oct 10 NodeJs
Nodejs处理异常操作示例
Dec 25 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 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蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
Python是如何进行类型转换的
2013/06/09 面试题
护理自我鉴定范文
2013/10/06 职场文书
秋冬农业生产标语
2014/10/09 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
二年级数学教学反思
2016/02/16 职场文书
求职自我评价参考范文
2019/05/16 职场文书
创业计划书之干洗店
2019/09/10 职场文书
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers
Python开发简易五子棋小游戏
2022/05/02 Python
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技