2012-05-03 47 views
1

,所以它可以代替相應的佔位符,這樣的事情:通變量CoffeeScript的命令行,如何通過一個變量的CoffeeScript

$ echo "module.exports = {version: '$VERSION'}" | coffee -p -s VERSION=0.0.0 

預計JS:

(function() { 

    module.exports = { 
    version: '0.0.0' 
    }; 

}).call(this); 

謝謝

+1

CoffeeScript本身不會爲你做這個。 [這個問題](http://stackoverflow.com/questions/9695207/conditional-compilation-in-coffeescript-uglifyjs/9703921)討論了可以在'coffee'之前或之後運行的預處理器。 –

回答

3

兩件事情:

  • 您需要在echo中定義VERSION,而不是在coffeescript編譯器中;到coffeescript編譯器看到它時,它已經將$VERSION轉換爲''
  • echo是shell內建的,因此標準VERSION=0.0.0 echo "$VERSION"構造不起作用。

所以,你要創建一個新的子shell使該版本的設置不會傳播到主殼,然後執行回聲和咖啡,像這樣:

$ (VERSION=0.0.0; echo "module.exports = {version: '$VERSION'}" | coffee -ps)  
(function() { 

    module.exports = { 
    version: '0.0.0' 
    }; 

}).call(this); 

周圍的括號表達停止VERSION從設置:

$ echo $VERSION                

$ 
+0

好的,我的例子可能太簡單了......你的技巧運作良好,但它不過是一個外殼而已。如果我想編譯一個整個文件夾:'coffee -c -o lib/src /',但是VERSION = 0.0.0,所以'$ VERSION'佔位符在'src /'的某個地方被替換了?謝謝 – abernier