用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框架Express的模板视图机制分析
Jul 19 NodeJs
使用nodejs、Python写的一个简易HTTP静态文件服务器
Jul 18 NodeJs
NodeJS学习笔记之(Url,QueryString,Path)模块
Jan 13 NodeJs
NodeJs的优势和适合开发的程序
Aug 14 NodeJs
nodejs基础知识
Feb 03 NodeJs
NodeJS配置HTTPS服务实例分享
Feb 19 NodeJs
深入理解Nodejs Global 模块
Jun 03 NodeJs
nodejs前端自动化构建环境的搭建
Jul 26 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 NodeJs
独立部署小程序基于nodejs的服务器过程详解
Jun 24 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
Nodejs技巧之Exceljs表格操作用法示例
Nov 06 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
php实现根据字符串生成对应数组的方法
2014/09/22 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
javascript parseInt 函数分析(转)
2009/03/21 Javascript
js DOM模型操作
2009/12/28 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
如何为你的JavaScript代码日志着色详解
2019/04/08 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
下载糗事百科的内容_python版
2008/12/07 Python
Python编程argparse入门浅析
2018/02/07 Python
python书籍信息爬虫实例
2018/03/19 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
内部类的定义、种类以及优点
2013/10/16 面试题
医学毕业生自荐信
2013/10/11 职场文书
办公室经理岗位职责
2014/01/01 职场文书
反邪教宣传工作方案
2014/05/07 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
辩护词格式
2015/05/22 职场文书
生产车间管理制度
2015/08/04 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
能让Python提速超40倍的神器Cython详解
2021/06/24 Python
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS