用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 win7下安装方法
May 24 NodeJs
nodejs实现的一个简单聊天室功能分享
Dec 06 NodeJs
Nodejs学习笔记之Stream模块
Jan 13 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
基于nodejs 的多页面爬虫实例代码
May 31 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 NodeJs
nodejs高大上的部署方式(PM2)
Sep 11 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
nodejs实现聊天机器人功能
Sep 19 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 NodeJs
用Nodejs实现在终端中炒股的实现
Oct 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
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
2009/01/30 PHP
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
laravel实现简单用户权限的示例代码
2019/05/28 PHP
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
2015/11/25 Javascript
常用的JQuery函数及功能小结
2016/03/24 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
2016/09/20 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
layui layer select 选择被遮挡的解决方法
2019/09/21 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
python机器学习之贝叶斯分类
2018/03/26 Python
Python3中列表list合并的四种方法
2019/04/19 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
django 消息框架 message使用详解
2019/07/22 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
.net软件工程师应聘上机试题
2015/03/10 面试题
化学实验员岗位职责
2013/12/28 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
管理失职检讨书
2014/02/12 职场文书
新闻学专业求职信
2014/07/28 职场文书
法制教育主题班会
2015/08/13 职场文书
2015年度考核个人工作总结
2015/10/24 职场文书
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA