2012-03-11 78 views
1

情景:我用一个简单的函数部署这样的过程来缩小和压缩JS文件:外壳脚本:遍历所有文件和modyfying名

for i in public/js/*.js; do uglifyjs --overwrite --no-copyright "$i"; done 

这种方法的问题是,它minifies并覆盖原有的文件。我想以某种方式介绍一个版本的缩小的JS和CSS文件。

假设我有一个版本为“123”的变量。如何修改我的脚本以使用此版本编写文件?它应该像这样的CSS和JS文件:

style.css -> style.123.css 
script.js -> script.123.js 

回答

1

应SH工作太:

VERSION=321; for i in public/js/*.js; do NEW=$(echo $i | sed s/\\./.$VERSION./) ; cp $i $NEW; uglifyjs --overwrite --no-copyright $NEW; done 
2

这样的事情?

VERSION=123; for i in public/js/*.js; do REV=${i/%.js/.${VERSION}.js}; cp "${i}" "${REV}"; uglifyjs --overwrite --no-copyright "${REV}"; done 

REV=${i/%.js/.${VERSION}.js}取代由 “.123.js” “.js文件” 的最后出现。

+0

辉煌,非常感谢。 – Pono 2012-03-11 20:49:57

+0

与node.js(child_process exec)一起使用时,发生错误:“/ bin/sh:错误替换”。任何快速修复的机会? – Pono 2012-03-14 18:38:08

+0

@Pono:'REV = $ {i /%。js /.$ {VERSION} .js}'是一个bash字符串操作。这就是为什么'/ bin/sh'可以工作的原因。用'#!/ bin/bash'替换脚本中的'#!/ bin/sh'。或者用sed调用'REV =“$(echo $ i | sed's#^ \(。* \)\)替换'REV = $ {i /%。js /.$ {VERSION} .js}'。 \([AZ] \ + \)$#\ 1。 '$ VERSION' \ 2#')“' – sgibb 2012-03-15 07:56:10

0

这是一个愚蠢的做法。使用版本控制工具对版本源进行版本控制。

但是,当然,你是对的,不想修改文件。

致电您的源文件foo.src.js(或其他)。 (保留最后的后缀.js,以便您的编辑器识别该语言)。然后有一个生成步骤,产生foo.js。当你正在开发时,你可以有一个“空编译”的步骤,只是复制foo.src.jsfoo.js。当您发布版本时,复制步骤将更改为执行uglifyjs而不是副本。无论哪种方式,当然,即使它只是一个副本,也不会手动编辑生成的foo.js。您可能想要,而不是仅仅复制,在顶部“生成的文件,请不要编辑”添加评论。

确切的细节取决于你。您可以将foo.js作为原始源文件的名称,只要您在加载时引用正确的名称,就可以使用foo.u.js