有谁知道通过上传处理脚本自动运行某些文件类型的好方法?当我将 CSS 和 Javascript 上传到服务器时,我试图自动完成它们的缩小,在本地保持一个漂亮的、人类可读的版本,同时在服务器上保持一个缩小的版本。我目前在 Windows 上使用 WinSCP,它在某种程度上是可编写脚本的,但可能不够可编写脚本。我可能需要某种拼凑而成的解决方案,所以不要害怕建议一些带有胶带的东西;但是,我确实需要在本地计算机上进行缩小并上传压缩文件,因为我使用共享主机并且无法在服务器上安装垃圾。
谢谢。
有谁知道通过上传处理脚本自动运行某些文件类型的好方法?当我将 CSS 和 Javascript 上传到服务器时,我试图自动完成它们的缩小,在本地保持一个漂亮的、人类可读的版本,同时在服务器上保持一个缩小的版本。我目前在 Windows 上使用 WinSCP,它在某种程度上是可编写脚本的,但可能不够可编写脚本。我可能需要某种拼凑而成的解决方案,所以不要害怕建议一些带有胶带的东西;但是,我确实需要在本地计算机上进行缩小并上传压缩文件,因为我使用共享主机并且无法在服务器上安装垃圾。
谢谢。
好吧,缩小 CSS 只是几个正则表达式。
// (PHP) but should be easily portable to any language
function compressCSS($css) {
return
preg_replace(
array('@\s\s+@','@(\w+:)\s*([\w\s,#]+;?)@'),
array(' ','$1$2'),
str_replace(
array("\r","\n","\t",' {','} ',';}'),
array('','','','{','}','}'),
preg_replace('@/\*[^*]*\*+([^/][^*]*\*+)*/@', '', $css)
)
)
;
}
并且 Dean Edwards 的 Javascript 打包器已被移植到PHP、Perl、.NET 和 WSH,因此,如果您使用这些技术中的任何一种,您实际上可以让它在您自己的服务器上运行。...只要记住缓存结果!
我建议创建一个 makefile 来解决这个特定问题,这是我用于我的站点的快速而肮脏的 makefile:
PUBDIR=../../static/js/
OUTDIR=./build/
COMPRESSOR=../yui/build/yuicompressor-2.4.2.jar
ARGS=
VPATH=${OUTDIR}
INST_TARGETS=${OUTDIR}jgblue.js
jgblue.js: combined.js
java -jar ${COMPRESSOR} ${ARGS} ${OUTDIR}$< -o ${OUTDIR}$@
combined.js: main.js listview.js tabs.js
cat $^ > ${OUTDIR}$@
.PHONY: install
install:
cp ${INST_TARGETS} ${PUBDIR}
然后你只需要输入:
make && make install
首先,它获取您所有的开发文件并将它们连接到一个文件中,然后将连接的文件压缩并复制到您的公共目录中。我正在使用YUICompressor进行压缩,效果很好。
由于您使用的是共享主机,我只建议使用YUICompressor,并在上传之前通过它运行您的 css/js 文件。确保不要丢失原始文件 - 将来进行更改可能会很痛苦。
您还可以在您的服务器上放置一个脚本,该脚本会定期重写您的 css/js 文件,将它们传递给 minify-process,并在上传后手动调用此脚本。
我喜欢缩小。它支持动态压缩和修剪 html、javascript 和 css。
它非常灵活,可以集成到现有的应用程序中。
一些更高级的功能是将多个 javascript 文件合并为一个,对于 css 也是如此。它有多种方法来定义要组合的文件,这对于测试目的很有用。这样您就不必每次都修改设置。
我刚刚在 python 中编写了这个 minfier 脚本。与 Bills 解决方案一样,它使用 YUI 压缩器,但可以在无制造环境中工作。它假定原始(未缩小)文件将位于 /some/path/src/ 中,并且缩小版本应位于 /some/path/ 中。它还假设 yuicompressor jar 文件在当前文件夹中:
import os, glob
from subprocess import Popen,PIPE
def RunCommand( cmd, show_output ):
p = Popen(cmd, shell=True,stdout=PIPE,stderr=PIPE)
for line in p.stdout:
if show_output:
print line
outerr = "\n".join(p.stderr.readlines() )
if len(outerr) > 0:
print "ERROR: " + outerr
sys.exit()
code = p.wait()
if ( code > 0 ):
print ("ERROR CODE: %i" % code )
sys.exit()
compresser = "yuicompressor-2.4.2.jar"
dirs = [ "../wwwroot/css/", "../wwwroot/JavaScript/"]
extensions = ["*.js", "*.css" ]
for dir in dirs:
src = dir + "/src/"
for ext in extensions:
for path in glob.glob( os.path.join( src, ext)):
file = os.path.basename(path)
src_file = os.path.normpath( src + "/" + file )
dest_file = os.path.normpath( dir + "/" + file )
if not os.path.isfile(dest_file) or os.path.getmtime(src_file) > os.path.getmtime(dest_file):
print "minifying %s..." % (dest_file)
command = "java -jar %s %s -o %s" % ( compresser, src_file, dest_file )
RunCommand(command, True)
我建议在你的开发机器上压缩(通过某种自动化方式)并在上传到你的实时服务器之前在那里测试它。在部署过程的最后阶段从根本上更改 JavaScript 是引入错误的明显风险。
非常酷的解决方案,它让 js 和 css 像梦一样自动服务。
检查:http ://code.google.com/p/minify/
特征
enter code here
两者(JS 和 CSS)都有一个更轻的解决方案,因此您可以“即时缩小”。您应该能够轻松地将其移植到任何语言(目前使用 PHP)。它实际上是 PHP Fat-Free 框架的一个片段和一个组成部分。按照此链接查看我的代码。这只是一个单一的功能。不要寻找诸如组合文件、base-X 编码、缩短变量甚至 gzip 编码之类的花里胡哨(尽管可以轻松添加)。