2012-03-11 77 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