用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学习笔记之(Url,QueryString,Path)模块
Jan 13 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
初探nodeJS
Jan 24 NodeJs
nodejs中向HTTP响应传送进程的输出
Mar 19 NodeJs
详解nodejs微信jssdk后端接口
May 25 NodeJs
Nodejs进阶之服务端字符编解码和乱码处理
Sep 04 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
NodeJs搭建本地服务器之使用手机访问的实例讲解
May 12 NodeJs
详解NodeJs开发微信公众号
May 25 NodeJs
NodeJs 文件系统操作模块fs使用方法详解
Nov 26 NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 NodeJs
nodejs中实现修改用户路由功能
May 24 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 空格,换行,跳格使用说明
2009/12/18 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
javaScript中push函数用法实例分析
2015/06/08 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
2016/11/08 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
Linux下Python获取IP地址的代码
2014/11/30 Python
浅谈python多线程和队列管理shell程序
2015/08/04 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
Python中format()格式输出全解
2019/04/12 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
Python socket聊天脚本代码实例
2020/01/02 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
保时捷设计:Porsche Design
2019/03/30 全球购物
大学生四年生活自我鉴定
2013/11/21 职场文书
采购内勤岗位职责
2013/12/10 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python