CSS 和 JS 文件合并工具
写 CSS 和 JavaScript 的时候, 我们会遇到一个两难的局面: 要么将代码写在一个大文件, 要么将代码分成多个文件. 前者导致文件难以管理, 代码复用性差, 后者则因为需要在载入多个文件令页面性能下降. 我们期望可以将代码细分成多个模块, 而在使用的时候可以合而为一.
本文会介绍一个 CSS 和 JS 的合并工具, 对模块化的文件进行管理.
CSS 和 JS 合并工具的发展
对于 CSS/JS 合并和压缩的问题, 有很多解决方案, 我所在的团队也经历了几个阶段.
- 网站刚刚搭建的时候, 纯属的手动合并 CSS 和 JS 文件.
- 因为手动易出错, 繁琐, 改为使用配置文件来管理. 当时我们用 JS Builder 和我自己写的一个叫 CSS Builder 的程序来管理, 后来同事楠乔做了一个叫 YCombo 的工具, 合并这两个工具的功能.
- 网站扩大, 文件多起来配置文件的管理也成为负担, 所以由 URL 作为配置, 比如:
http://a|b|c.css则合并 a.css, b.css 和 c.css 三个文件; 还通过专门的服务来寻找页面中使用的 JavaScript 并自动合并.
无疑第三种的处理方式最完美, 开发者省心省力, 但因为需要专门的服务管理和部署策略. 对小型网站和个人网站来说, 前面提到的第二种方案更为实用. 本文会介绍一下这款叫 YCombo 的工具和对应的两个 GUI 工具.
YCombo 介绍
顾名思义, 它主要为了解决合并 CSS 和 JS 文件的工作, 需要依赖一个命名为 .css.seed 或者 .js.seed 的配置文件. 比如: 现在有配置文件 xxoo.js.seed, 通过 YCombo 处理后在同目录可以得到合并后的 JS 文件 xxoo.js.
YCombo 已经发布在 Github, 需要 JRE 1.6 或以上版本支持, 执行操作如下:
java -jar ycombo.jar [参数列表] [配置文件地址]
对应的参数列表和相关说明请查阅 YCombo 文档.
配置文件
.css.seed 和 .js.seed 支持两种特殊语法:
// #require "PATH"和/* #require "PATH" */, 引用绝对路径的文件或者相对于本配置路径的文件.// #require <PATH>和/* #require <PATH> */, 引用基于 root 目录的文件.
YCombo 会按后续遍历顺序加载配置文件, 解决依赖问题和进行去重处理. 这里是个遍历顺序的例子:
SEED
/\
A B
/ /\
C C D
/ / /\
E E F G
文件引入和合并的顺序如下:
E > C > A > F > G > D > B > SEED
用户界面工具
如果前面的使用方法你看不出头绪, 没有关系. 为了方便用户使用, 我们做了两个 GUI 版本: YComboGUI 和 JCombo.
- YComboGUI: 是 YCombo 作者做的一个依赖 .NET framework 的版本, 可以在 Windows 系统使用. [下载]
- JCombo: 因为有些开发没有 Windows 开发环境, 我做的一个基于 Java 的版本, 可以在所有操作系统使用. [下载]

后话
我自己的网站一直使用 YCombo 来合并 JavaScript, 再通过 JavaScript 压缩和混淆. 我将 JS 拆分成 20 来个小粒度的文件 (包括 jQuery), 总文件大小 280KB, 合并后 170KB, 压缩和混淆后只剩 90KB.
这个工具适合个人网站和小团队开发使用, 欢迎完善, 建议和反馈.
<摘自:http://www.neoease.com/css-javascript-combo-tool/>
CSS 和 JS 文件合并工具的更多相关文章
- gulp 之一 安装及简单CSS,JS文件合并压缩
最近研究了一下gulp构建工具,发现使用起来比grunt顺手一些.(个人感受),以下是grunt和gulp构建方式和原理: grunt 基于文件方式构建,会把文件先写到临时目录下,然后进行读文件,修改 ...
- 使用System.Web.Optimization对CSS和JS文件合并压缩
在ASP.NET MVC 中JS/CSS文件动态合并及压缩通过调用System.Web.Optimization定义的类ScriptBundle及StyleBundle来实现. 大致步骤如下: 1.A ...
- Gulp实现css、js、图片的压缩以及css、js文件的MD5命名
目前做代码压缩合并的工具有很多,诸如gulp,webpack,grunt等等,可以说这些项目构建工具的功能非常之强大:图片压缩.图片转base64.css和js的压缩以及合并,文件的md5重命名 -- ...
- django引用static目录下的css,js文件304问题
前提:django1.8 在html页面可以请求道css,js文件并在chrome的开发者工具中查看css,js文件返回状态为200 原因: html页面在头部添加了<!DOCTYPE html ...
- django 解决css,js文件304导致无法加载显示问题
这种情况一般会在windows系统下出现 1.前台.后台如果无法加载css等样式.(建议通过此办法来解决) 这是因为你安装的某些IDE 或者其他更改了注册表导致的系统的注册表\HKEY_CLASSES ...
- IE浏览器没有加载CSS或js文件的秘密及解决办法
其实是两处资料拼成这一篇博文的,因为在开发过程中遇到,有的文章只是说明原因,而没有给出解决方案,所以再次给出解释和解决方法,以供参考,如果有好的解决方法,也请分享下! ---------------- ...
- JQuery 加载 CSS、JS 文件
JS 方式加载 CSS.JS 文件: //加载 css 文件 function includeCss(filename) { var head = document.getElementsByTagN ...
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
找了这么久资料,总算解决了 感谢博客园:http://www.cnblogs.com/xsht/p/5275081.html 感谢百度:http://zhidao.baidu.com/link?url ...
- CI框架引入外部css和js文件
首先在项目根目录下建立assets文件夹,在这个文件夹下再建立css和js文件夹分别放置css和js文件 然后,在项目根目录下建立.htaccess文件 内容如下: RewriteEngine on ...
随机推荐
- Win10中解决SYSTEM权限获取,删Windows old
一.[Windows.old]文件夹[右键]->[属性] 二.[安全]->[高级] 三.[更改] 四.添加[Everyone],点击[确定] 五.如下图,勾选两个选项,再[确定] 六.一路 ...
- 如何查询Oracle中所有用户信息
1.查看所有用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角色系统权限( ...
- Codeforces Round #389 Div.2 B. Santa Claus and Keyboard Check
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- Unity赛车游戏之移动
这个赛车游戏真是让我费劲脑汁啊.尤其是写这种系统化的东西. 目前漂移还没找到更好的算法,不过基本的移动还是可以做到的. 别看就光是个移动,其实也是很费事的. Unity给了个对于赛车系统很好的碰撞组件 ...
- CSS 公共样式分享
global.css | reset.css(格式化样式) common.css(公共组件样式) layout.css(当前页面样式) 清除全站所有页面的浏览器默认样式,保证在初始样式在所有浏览器下一 ...
- Django admin coercing to Unicode: need string or buffer, tuple found
见 http://stackoverflow.com/questions/29762306/django-admin-coercing-to-unicode-need-string-or-buffer ...
- JavaScript制作时钟特效
需求说明:制作显示年.月.日.星期几并且显示上午(AM)和下午(PM)的 12进制的时钟,具体效果如下所示: 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C// ...
- 1 NFS高可用解决方案之DRBD+heartbeat搭建
preface NFS作为业界常用的共享存储方案,被众多公司采用.我司也不列外,使用NFS作为共享存储,为前端WEB server提供服务,主要存储网页代码以及其他文件. 高可用方案 说道NFS,不得 ...
- java函数substring()
String str; str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str: str=str.sub ...
- 使用canvas绘制时钟
使用canvas绘制时钟 什么使canvas呢?HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.<canvas> 标签只是图 ...