用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关于gzip/deflate压缩详解
Mar 04 NodeJs
Nodejs express框架一个工程中同时使用ejs模版和jade模版
Dec 28 NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 NodeJs
用nodejs的实现原理和搭建服务器(动态)
Aug 10 NodeJs
Nodejs抓取html页面内容(推荐)
Aug 11 NodeJs
NodeJS处理Express中异步错误
Mar 26 NodeJs
Ajax异步文件上传与NodeJS express服务端处理
Apr 01 NodeJs
Nodejs中使用captchapng模块生成图片验证码
May 18 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
使用koa-log4管理nodeJs日志笔记的使用方法
Nov 30 NodeJs
NodeJs实现简单的爬虫功能案例分析
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中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
纯php生成随机密码
2015/10/30 PHP
php头像上传预览实例代码
2017/05/02 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
jQuery 性能优化指南(3)
2009/05/21 Javascript
基于jquery的让页面控件不可用的实现代码
2010/04/27 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
python引用DLL文件的方法
2015/05/11 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对
2015/05/02 面试题
大学生毕业自我评价范文分享
2013/11/07 职场文书
大家访活动实施方案
2014/03/10 职场文书
医学专业自荐信
2014/06/14 职场文书
年检委托书
2014/08/30 职场文书
争先创优心得体会
2014/09/12 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书