2013-05-07 96 views
2

我的使用情況如下:如何讓coffeescript編譯器忽略源文件的一部分?

我決定嘗試對一些項目的NodeJS CoffeeScript的,我想我的一些源文件,開始與#!/usr/bin/env node

CoffeeScript的對待與#爲註釋開頭的行。

我知道,你可以嵌入JS代碼在.coffee但事實並非如此,因爲

file.coffee

`#!/usr/bin/env node` 

foo = 'bar' 

編譯爲: file.js

(function() { 
    #!/usr/bin/env node; 
    var foo; 

    foo = 'bar'; 

}).call(this); 

回答

5

編譯器沒有按」 t支持這一點。參見:https://github.com/jashkenas/coffee-script/issues/2215

但是爲什麼不用coffee來代替它?

#!/usr/bin/env coffee 
console.log 'Hello World' 

然後就運行./my_code.coffeecoffee可執行文件僅僅是一個節點的包裝,可以在幾乎所有情況下使用。


或者在編譯步驟之後創建某種構建系統。但你不應該真的需要。

+0

我的拉鍊請求鏈接的用例是一個將可執行文件安裝到路徑的包。該腳本需要一個shebang,它需要是Javascript(你不能指望用戶安裝Coffeescript)。 – 2013-05-07 19:13:34

+1

因此,製作一個構建腳本或一個調用「咖啡」併爲您編譯的蛋糕任務,然後將shebang添加到正確的文件中。 – 2013-05-07 19:20:00

+0

我做到了。我不得不。但是,如果您有一個要編譯的腳本文件夾,並且關心跨平臺,那並不好玩。它應該像'咖啡-o lib -c src --shebang'一樣容易# – 2013-05-07 19:43:05

0

你想要的是CoffeeScript不可能的,儘管你可以 - 正如Alex Wayne所建議的那樣 - 如果你願意,可以手動將文件添加到文件中。

我爲我的一個項目做了什麼,正在製作一個非常小的帶腳本的JS腳本,它加載了從CoffeeScript編譯的JS代碼。見這個文件https://github.com/meryn/jumpstart/blob/master/bin/jumpstart。這很好。

這樣做的另一個優點是測試更簡單。您不必開始新的子進程來運行代碼。相反,您可以使用呼叫run函數,或者您可以調用它。這當然會留下傳遞適當參數的問題。我通過使run函數(請參閱https://github.com/meryn/jumpstart/blob/master/src/run.coffee的源代碼)將代碼幾乎全部委託給runWith函數,該函數可以傳遞腳本需要的所有輸入變量(環境,cli參數等)。