一,安装环境

1.安装spm

spm工具是基于node(nodejs的服务平台)的,因此我们需要先安装 node 和 npm 下载地址:http://nodejs.org/#download.下载完成后安装即可。

node安装完成后,找到cmd命令文件以管理员的方式打开,输入以下命令进行安装:

npm install spm -g

在此过程中,可能需要你很长的时间等待。(偶尔可能连接失败了,你需要关闭cmd后重新开启并执行同样的命令,过程将继续)

安装完成后,恭喜你,可以使用了。

2.spm的使用

使用spm其实就是执行cmd命令,安装完成后,你就可以使用命令了 (当然有很多命令的),输入:

spm help

你会看到所有的命令。我们主要用的命令就是

spm build

当然得注意两点:

(1).需要将执行目录切换到项目。比如你的项目js目录在D:/www/spm/js下;则需要先用cmd命令切换到D:/www/spm/js.见下图

(2).项目的js目录结构里面必须包含src目录,即未合并和压缩的js文件(seajs模块文件)。目录结构约定传送门。

最后,这些只是将了我接触的时候遇到的问题,具体spm命令及使用细节请见官方文档

https://github.com/spmjs/spm/

二,批量压缩类

写了个类查找所有JS文件,调用DOS命令执行文件的压缩

package com.tank.test;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
 
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggerFactory;
 
/**
 * @author tank
 * @date:Sep 24, 2012 4:14:58 PM
 * @description:
 * @version :1.0
 */
public class TestSeaJS {
    private static final Logger logger = Logger.getLogger(TestSeaJS.class);
    private static final String SRC_PATH = "F:/MyEclipseforSpring8.6/showcang/WebRoot/js";
    private static final String OUT_PATH = "D:/apache-tomcat-6.0.35/webapps/showcang/js";
    //private static final String APP_URL = "http://127.0.0.1:8080/js";
    private static final String APP_URL = "http://www.showcang.com/js";
    // private static final String CMD = "spm build #0# --combine --app_url #1#
    // --app_path #2# --out_path #3#";
    private static StringBuffer sb = new StringBuffer();
  
    public static void main(String[] args) {
        //String cmdStr = "spm build ${0} --combine --app_url ${1} --app_path ${2} --out_path ${3}";
        File file = new File(SRC_PATH);
        StringBuffer sbcontext = new StringBuffer();
        // sbcontext.append("d: \r");
        // sbcontext.append("cd D:/Soft/seajs-spm-ab7a728/demo/js \r");
        findFile(file, sbcontext);
        new FileHelper().getWriteTXT("c:/seajs.bat", sbcontext.toString());
        logger.info("压缩完成!");
    }
 
    public static void findFile(File file, StringBuffer sbcontext) {
        File[] dir = file.listFiles();
        for (File f : dir) {
            if (f.isFile()) {
                String filepath = f.getAbsolutePath();
                if (filepath != null && filepath.toLowerCase().endsWith("js")) {
                    String dirpath = f.getParentFile().getPath();
                    String outPath = dirpath.substring(SRC_PATH.length());
                    sb.delete(0, sb.length());
 
                    sb.append("spm build ").append(filepath).append(" --combine --app_url ").append(APP_URL).append(" --app_path ").append(dirpath).append(
                            " --out_path ").append(OUT_PATH).append(outPath);
 
                    sbcontext.append(sb.toString());
                    Runtime rt = Runtime.getRuntime();
                    BufferedReader br = null;
                    try {
                        Process process = rt.exec("cmd  /C " + sb.toString());
                        br = new BufferedReader(new InputStreamReader(process.getInputStream()));
                        String line = br.readLine();
                        while (line != null) {
                            logger.info(line);
                            line = br.readLine();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                        logger.error(e.getMessage());
                    } finally {
                        if (br != null) {
                            try {
                                br.close();
                            } catch (Exception e) {
                                e.printStackTrace();
                                logger.error(e.getMessage());
                            }
                        }
                    }
                    sbcontext.append("\r");
                }
            } else if (file.isDirectory()) {
                findFile(f, sbcontext);
            }
        }
 
    }
 
}

  文件帮助类:

package com.tank.test;
 
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
 
/**
 * @author tank
 * @date:Sep 26, 2011 9:03:29 PM
 * @description: 纯文本文件操作类 .txt
 * @version :
 */
public class FileHelper {
    public String getReadTXT(String path) {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(new FileInputStream(path), "utf-8"));
            String data = null;
            StringBuffer sbf = new StringBuffer();
            while ((data = br.readLine()) != null) {
                sbf.append(data);
            }
 
            return sbf.toString();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
 
        }
        return null;
    }
 
    public boolean getWriteTXT(String path, String writeContext) {
        OutputStreamWriter fw = null;
        try {
 
            fw = new OutputStreamWriter(new FileOutputStream(path), "utf-8");
 
            fw.write(writeContext, 0, writeContext.length());
            fw.flush();
 
            return true;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        } finally {
            try {
                fw.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
 
    }
 
 
}

  三,写批处理调用

java -jar compass.jar

  执行bat即可!

更多开发分享请访问:http://www.javarecord.com/

使用spm build 批量打包压缩seajs 代码的更多相关文章

  1. 打包并压缩seajs代码

    背景 seajs是一款优秀的模块开发插件,但是当我们使用它来进行模块化开发的时候,由于它的每个模块的加载都会进行一次http请求,那么当模块数量倍增的时候,会拖慢页面的加载速度. 通常我们为了能加快页 ...

  2. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器开放平台利用 webpack 打包压缩后端代码

    需求背景 javaScript的用途是解决页面交互和数据交互,最终目的是丰富客户端效果以及数据的有效传递. 并且具有良好的用户体验. javaScript可以快速实现页面交互,即js操作html的do ...

  3. seajs代码

    打包并压缩seajs代码 背景 seajs是一款优秀的模块开发插件,但是当我们使用它来进行模块化开发的时候,由于它的每个模块的加载都会进行一次http请求,那么当模块数量倍增的时候,会拖慢页面的加载速 ...

  4. 构建seajs业务模块之grunt VS spm build

    在最开始,我并不知道grunt可以构建CMD模块.(以下spm指代spm build) 当时正困惑于如何用spm方便的构建业务模块,后来看到@twinstony (感谢@twinstony的分享)使用 ...

  5. 【实践】require.js + r.js 代码打包压缩初体验

    第二个分享的是学校项目所接触到的新知识,代码压缩 + 代码打包 这次的项目用了require.js 这个插件做模块化管理的工具,所谓模块化就是在开发的过程中将功能划分成一个独立的模块,使代码可读性更强 ...

  6. gulp打包压缩代码以及图片

    1.首先全局安装gulp 全局安装就不做介绍了 初学gulp,终于把常用的配置,api,语法弄明白了! gulp插件地址:http://gulpjs.com/plugins gulp官方网址:http ...

  7. 关于 iOS 批量打包的总结

      关于 iOS 批量打包的总结 本文作者: 伯乐在线 - Tsui YuenHong .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 如果你曾经试过做多 target 的项目,到了测试人员要 ...

  8. iOS 批量打包--Shell脚本

    由于公司有批量打包的需要,只是渠道号不一样,网上搜索一番,大致有两个方式:a) 从源程序一次性打出所有渠道的ipa包,大概的思路就是利用脚本循环执行打包过程,而每次打包前都通过脚本修改项目中存放渠道号 ...

  9. Unity3D研究院之脚本批量打包渠道包研究

    原地址:http://www.xuanyusong.com/archives/2418#comments 最近在研究Unity3D脚本批量打包,比如在Android平台下各种不同分辨率和不同内存大小的 ...

随机推荐

  1. 聊一聊 Android 6.0 的运行时权限

    权限一刀切 棉花糖运行时权限 权限的分组 正常权限 正常权限列表 特殊权限危险权限 请求SYSTEM_ALERT_WINDOW 请求WRITE_SETTINGS 必须要支持运行时权限么 不支持运行时权 ...

  2. 空格&nbsp在不同浏览器中显示距离不一致问题解决方法

      在ie.firefox.chrome浏览器上显示的效果不太一样,主要是前面的空格宽度不同. 网上资料说不同的浏览器会有不同的默认字体.一般 IE默认字体都是宋体,而firefox和chrome的默 ...

  3. C++中各种数据量类型转换

    要在Unicode字符集环境下把CString转化为char* 方法: CString str = _T("D://校内项目//QQ.bmp");//////leo这个NB  可以 ...

  4. Controller里写自己需要的Action,参数的名字必须和路由设置的参数名一致

    Controller里写自己需要的Action,参数的名字必须和路由设置的参数名一致,如果参数不一致,传过去为null

  5. javascript闭包分析

    闭包是什么?闭包是Closure,简而言之,闭包就是: 闭包就是函数的局部变量集合,只是这些局部变量在函数返回后会继续存在. 闭包就是就是函数的“堆栈”在函数返回后并不释放,我们也可以理解为这些函数堆 ...

  6. css3遇到的一些属性

    rgba          是由red.green.blue 三种颜色搭配出来的box-shadow     向元素添加阴影层,水平阴影位置,垂直阴影位置,后面是可选:模糊距离,阴影大小,颜色,是否是 ...

  7. inline-block间隙原因和解决方法(web前端问题)

    申明:IE7无法测试,所以下面说的IE6指IE6和IE7 1,遇到的问题 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Styl ...

  8. servlet HttpSession 监听器

    一.Servlet中对象作用域 1. ServletContext 上下文 应用服务器一启动就产生该对象,服务器关闭即销毁 作用于全局,所有Servlet ,相当于静态变量 2. HttpSessio ...

  9. 记录Access数据库更新操作大坑一个

    对于更新Access数据库的操作,必须保持参数数组与sql语句中参数顺序一致,如下: public bool Update(MyModel model) { StringBuilder strSql ...

  10. o] TortoiseGit错误 - Could not get all refs. libgit2 returned: corrupted loose reference file

    因无法追溯的同步操作错误或工程文件错误,造成Git 同步时报错: Could not get all refs. libgit2 returned: corrupted loose reference ...