用nodejs写的一个简单项目打包工具

 更新时间:2013年05月11日 17:02:54   作者:  
项目是模块加载的,类似require.js的用法,所以简单写了一个js打包工具

项目的模块加载和定义部分代码是这样的:

复制代码 代码如下:

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之前一直没认真学习,都是边查文档,编写的,所以代码很青涩~

相关文章

  • 详解Java中String JSONObject JSONArray List<实体类>转换

    详解Java中String JSONObject JSONArray List<实体类>转换

    这篇文章主要介绍了详解String JSONObject JSONArray List<实体类>转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • javascript操作JSON的要领总结

    javascript操作JSON的要领总结

    JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包,需要的朋友可以了解下
    2012-12-12
  • json 入门基础教程 推荐

    json 入门基础教程 推荐

    在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式。掌握 Ajax 的这一期讨论另一种有用的数据格式 JavaScript Object Notation(JSON),以及如何使用它更轻松地在应用程序中移动数据和对象。
    2009-10-10
  • 用JSON做数据传输格式中的一些问题总结

    用JSON做数据传输格式中的一些问题总结

    Json 凭借其自身的优势,在Web数据处理方面已经占据了一定的位置,这段时间涉及到用Json做为数据传输格式的项目有3个,其中有部分页面就采用了Json 数据传输格式, 这里我总结下这段时间采用这种方式的一些问题总结
    2011-12-12
  • json简单介绍

    json简单介绍

    我们知道AJAX技术能够使得每一次请求更加迅捷,对于每一次请求返回的不是整个页面,也仅仅是所需要返回的数据。
    2008-06-06
  • 对比分析json及XML

    对比分析json及XML

    本文是根据自己对json、xml的了解,参考了部分资料,结合网上的一些视频教程总结出来的一篇个人对于json和XML的感悟,以及他们之间在使用的时候的优劣,这里推荐给大家。
    2014-11-11
  • js实现删除json中指定的元素

    js实现删除json中指定的元素

    这篇文章主要介绍了js实现删除json中指定的元素,需要的朋友可以参考下
    2020-09-09
  • 教你如何使用PHP输出中文JSON字符串

    教你如何使用PHP输出中文JSON字符串

    PHP 和 JavaScript 交互其实很方便,PHP 原生也提供了对 JSON 格式的支持。主要包括 JSON 编码和解码两个函数:
    2014-05-05
  • 深入浅析同源与跨域,jsonp(函数封装),CORS原理

    深入浅析同源与跨域,jsonp(函数封装),CORS原理

    这篇文章主要介绍了同源与跨域,jsonp(函数封装),CORS原理,从同源政策中Ajax限制,到跨域问题以及跨域问题的解决方法帮大家更加深入的去了解其中原理
    2021-08-08
  • JSONP跨域GET请求解决Ajax跨域访问问题

    JSONP跨域GET请求解决Ajax跨域访问问题

    本文主要是介绍了JSONP跨域是如何实现的,并探讨下JSONP跨域的原理。以及采用JSONP跨域GET请求解决Ajax跨域访问问题,需要的朋友可以参考下
    2014-12-12

最新评论