使用spm build 批量打包压缩seajs 代码
一,安装环境
1.安装spm
spm工具是基于node(nodejs的服务平台)的,因此我们需要先安装 node 和 npm 下载地址:http://nodejs.org/#download.下载完成后安装即可。
node安装完成后,找到cmd命令文件以管理员的方式打开,输入以下命令进行安装:
在此过程中,可能需要你很长的时间等待。(偶尔可能连接失败了,你需要关闭cmd后重新开启并执行同样的命令,过程将继续)
安装完成后,恭喜你,可以使用了。
2.spm的使用:
使用spm其实就是执行cmd命令,安装完成后,你就可以使用命令了 (当然有很多命令的),输入:
你会看到所有的命令。我们主要用的命令就是
当然得注意两点:
(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 代码的更多相关文章
- 打包并压缩seajs代码
背景 seajs是一款优秀的模块开发插件,但是当我们使用它来进行模块化开发的时候,由于它的每个模块的加载都会进行一次http请求,那么当模块数量倍增的时候,会拖慢页面的加载速度. 通常我们为了能加快页 ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器开放平台利用 webpack 打包压缩后端代码
需求背景 javaScript的用途是解决页面交互和数据交互,最终目的是丰富客户端效果以及数据的有效传递. 并且具有良好的用户体验. javaScript可以快速实现页面交互,即js操作html的do ...
- seajs代码
打包并压缩seajs代码 背景 seajs是一款优秀的模块开发插件,但是当我们使用它来进行模块化开发的时候,由于它的每个模块的加载都会进行一次http请求,那么当模块数量倍增的时候,会拖慢页面的加载速 ...
- 构建seajs业务模块之grunt VS spm build
在最开始,我并不知道grunt可以构建CMD模块.(以下spm指代spm build) 当时正困惑于如何用spm方便的构建业务模块,后来看到@twinstony (感谢@twinstony的分享)使用 ...
- 【实践】require.js + r.js 代码打包压缩初体验
第二个分享的是学校项目所接触到的新知识,代码压缩 + 代码打包 这次的项目用了require.js 这个插件做模块化管理的工具,所谓模块化就是在开发的过程中将功能划分成一个独立的模块,使代码可读性更强 ...
- gulp打包压缩代码以及图片
1.首先全局安装gulp 全局安装就不做介绍了 初学gulp,终于把常用的配置,api,语法弄明白了! gulp插件地址:http://gulpjs.com/plugins gulp官方网址:http ...
- 关于 iOS 批量打包的总结
关于 iOS 批量打包的总结 本文作者: 伯乐在线 - Tsui YuenHong .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 如果你曾经试过做多 target 的项目,到了测试人员要 ...
- iOS 批量打包--Shell脚本
由于公司有批量打包的需要,只是渠道号不一样,网上搜索一番,大致有两个方式:a) 从源程序一次性打出所有渠道的ipa包,大概的思路就是利用脚本循环执行打包过程,而每次打包前都通过脚本修改项目中存放渠道号 ...
- Unity3D研究院之脚本批量打包渠道包研究
原地址:http://www.xuanyusong.com/archives/2418#comments 最近在研究Unity3D脚本批量打包,比如在Android平台下各种不同分辨率和不同内存大小的 ...
随机推荐
- 基于特定领域国土GIS应用框架设计及应用
基于特定领域国土GIS应用框架 设计及应用 何仕国 2012年8月16日 摘要: 本文首先讲述了什么是框架和特定领域框架,以及与国土GIS 这个特定领 ...
- 开源免费天气预报接口API以及全国全部地区代码!!(国家气象局提供)
国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data ...
- MYSQL 5.7 MTS 复制
http://www.linuxidc.com/Linux/2013-04/82712p2.htm http://keithlan.github.io/2016/06/28/MTS/ http://d ...
- careercup-数组和字符串1.3
1.3 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排序后,能否变成另一个字符串. C++实现代码: #include<iostream> #include<map> ...
- Python实战:Python爬虫学习教程,获取电影排行榜
Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...
- 在C#中实现Socket端口复用
转载:http://www.csharpwin.com/csharpspace/68.shtml 一.什么是端口复用: 因为在winsock的实现中,对于服务器的绑定是可以多重绑定的,在 ...
- ios 字符串替换方法
string=[string stringByReplacingOccurrencesOfString:@"-"withString:@"/"];
- librarynotfoundforlPodsAFNetworking解决放案
http://www.it165.net/pro/html/201503/36422.html
- 判断用户输入是否为int整型方法之一!
; string vv = this.textBox2.Text; if (int.TryParse(vv, out age)) { age = int.Parse(this.textBox2.Tex ...
- 类库探源——System.Delegate
一.MSDN 描述 Delegate 类:表示委托,委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法.(是不是感觉很像C语言中的函数指针 :) ) 命名空间: System 程序集: ...