用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 相关文章推荐
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
async/await与promise(nodejs中的异步操作问题)
Mar 03 NodeJs
详解使用nodeJs安装Vue-cli
May 17 NodeJs
深入学习nodejs中的async模块的使用方法
Jul 12 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
详解Nodejs内存治理
May 13 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
nodejs实现一个word文档解析器思路详解
Aug 14 NodeJs
NodeJS使用Range请求实现下载功能的方法示例
Oct 12 NodeJs
nodejs使用node-xlsx生成excel的方法示例
Aug 22 NodeJs
NodeJs内存占用过高的排查实战记录
May 10 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 选项及相关信息函数库
2006/12/04 PHP
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
jQuery链使用指南
2015/01/20 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
python实现雨滴下落到地面效果
2018/06/21 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
实现Python与STM32通信方式
2019/12/18 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
Python 实现数组相减示例
2019/12/27 Python
Python列表如何更新值
2020/05/27 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
Shell编程面试题
2012/05/30 面试题
护士自我鉴定怎么写
2014/02/07 职场文书
计算机专业毕业生自荐信范文
2014/03/06 职场文书
政风行风建设整改方案
2014/10/27 职场文书
医院见习报告范文
2014/11/03 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
i7 6700处理器相当于i5几代
2022/04/19 数码科技