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

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

代码如下:

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

(0)

相关推荐

  • 将nodejs打包工具整合到鼠标右键的方法

    打包用到的批处理文件代码如下: 复制代码 代码如下: @echo offtitle Builder - 正在合并 ... color 03REM =====================================REM     jsbuilder beta版REMREM =====================================SETLOCAL ENABLEEXTENSIONS echo. REM 过滤文件后缀,只combo js文件if "%~x1" NEQ

  • nodejs下打包模块archiver详解

    archiver是一个在nodejs中能跨平台实现打包功能的模块,可以打zip和tar包,是一个比较好用的三方模块. 使用前先安装archiver模块. 复制代码 代码如下: npm install archiver 建立一段代码 复制代码 代码如下: var archiver = require('archiver'); var fs = require('fs'); //被打包文件 var files = [   'files/001.png',   'files/002.png'   ];

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

    项目的模块加载和定义部分代码是这样的: 复制代码 代码如下: XX.define('ns',['tool/cookie'],function(){});//或者XX.define('ns.ns2','tool/cookie,tool/abc',function(){})//或者XX.define('ns',function(){}) 所用到的js打包工具就是扫描文件,然后匹配出来需要加载的模块,然后先加载模块代码.主要的nodejs打包工具代码如下: 复制代码 代码如下: //通用模块var U

  • 纯css+js写的一个简单的tab标签页带样式

    最近经常要用tab标签页,所以写了一个简单的,以后用的话直接拷贝一个,稍微改改就OK了. 先看效果图:  接下来看下代码怎么写的吧: 一.sp文件easytab.jsp 复制代码 代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String b

  • pycharm社区版安装django并创建一个简单项目的全过程

    目录 前言 1.在PyChrom下载django包 2. 创建项目 3. pycharm中运行 总结 前言 最近在某学习网站看视频发现up主直接打开pycharm新建项目就可以创建django项目,但是自己的pycharm打开只能建python文件,之后才知道自己的pycharm社区版的功能有限,所以需要自己配置django环境.下面就总结一下步骤. 1.在PyChrom下载django包 首先需要新建一个项目,然后在对应的项目中配置django环境.(此处默认您已经打开了一个项目了),接下来按

  • C#使用TcpListener及TcpClient开发一个简单的Chat工具实例

    本文使用的开发环境是VS2017及dotNet4.0,写此随笔的目的是给自己及新开发人员作为参考, 本例子比较简单,使用的是控制台程序开发,若需要使用该软件作为演示,必须先运行服务端,再运行客户端. 因为是首次接触该方面的知识,写得比较简陋,如有更好的建议,请提出,谢谢! 一.编写服务器端代码,如下: using System; using System.Text; using System.Net; using System.Net.Sockets; using System.Threadin

  • python实现一个简单的ping工具方法

    继上一篇计算checksum校验和,本章通过socket套接字,struct字节打包成二进制,select返回套接字的文件描述符的结合,实现一个简单的ping工具. #!/usr/bin/python3.6.4 #!coding:utf-8 __author__ = 'Rosefinch' __date__ = '2018/5/31 22:27' import time import struct import socket import select import sys def chesks

  • Golang 基于 flag 库实现一个简单命令行工具

    目录 前言 flag 库 FlagSet 需求拆解 实现 weather flag 天气数据打印 获取源数据 数据转换 运行效果 小结 前言 Golang 标准库中的 flag 库提供了解析命令行选项的能力,我们可以基于此来开发命令行工具. 假设我们想做一个命令行工具,我们通过参数提供[城市],它自动能够返回当前这个[城市]的天气状况.这样一个简单的需求,今天我们就来试一下,看怎样实现. flag 库 Package flag implements command-line flag parsi

  • nodejs实现的一个简单聊天室功能分享

    今天我来实现一个简单的聊天室,后台用nodejs, 客户端与服务端通信用socket.io,这是一个比较成熟的websocket框架. 初始工作 1.安装express, 用这个来托管socket.io,以及静态页面,命令npm install express --save,--save可以使包添加到package.json文件里. 2.安装socket.io,命令npm install socket.io --save. 编写服务端代码 首先我们通过express来托管网站,并附加到socke

  • Nodejs实现的一个简单udp广播服务器、客户端

    nodejs发送udp广播还是蛮简单的,我们先写个服务器用于接收广播数据,代码如下: 复制代码 代码如下: var dgram = require("dgram"); var server = dgram.createSocket("udp4"); server.on("error", function (err) {   console.log("server error:\n" + err.stack);   server

  • Python写的一个简单监控系统

    市面上有很多开源的监控系统:Cacti.nagios.zabbix.感觉都不符合我的需求,为什么不自己做一个呢 用Python两个小时徒手撸了一个简易的监控系统,给大家分享一下,希望能对大家有所启发 首先数据库建表 建立一个数据库"falcon",建表语句如下: CREATE TABLE `stat` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `host` varchar(256) DEFAULT NULL, `mem_free`

  • Python写的一个简单DNS服务器实例

    因为突然有个邪恶的想法,想在自己的Android平板上面搭建一个DNS服务器,因为平板上之前安装过SL4A和Python的解释器,也想继续学学Python因此,就打算用Python实现了. 在Google上面找了一下,Python实现的DNS,没找到我所希望的答案,因此就决定自己来实现了. 现在所实现的没什么高深的,只是能够对A记录查询进行简单的匹配和回复. 实现的代码如下: 复制代码 代码如下: '''Created on 2012-10-15 @author: RobinTang''' im

随机推荐