用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中使用monk访问mongodb
Jul 06 NodeJs
nodejs中实现阻塞实例
Mar 24 NodeJs
浅析Nodejs npm常用命令
Jun 14 NodeJs
在windows上用nodejs搭建静态文件服务器的简单方法
Aug 11 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
NodeJS仿WebApi路由示例
Feb 28 NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
nodejs简单实现TCP服务器端和客户端的聊天功能示例
Jan 04 NodeJs
Nodejs封装类似express框架的路由实例详解
Jan 05 NodeJs
Nodejs实现微信分账的示例代码
Jan 19 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 面向对象的一个例子
2011/04/12 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
浅析PHP中Session可能会引起并发问题
2015/07/23 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
利用python获得时间的实例说明
2013/03/25 Python
python根据经纬度计算距离示例
2014/02/16 Python
Python中的pack和unpack的使用
2018/03/12 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
高中生学习总结的自我评价范文
2013/10/13 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
全国道德模范事迹
2014/02/01 职场文书
致跳高运动员加油稿
2014/02/12 职场文书
《小儿垂钓》教学反思
2014/02/23 职场文书
书香家庭事迹材料
2014/05/09 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers