2012-03-28 143 views
8

我正在使用CoffeeScript(編寫Cakefile)。我想編譯一些其他的CoffeeScript文件,點菜CoffeeScript編譯器API

coffee -o lib -c src 

我可以在一個子進程啓動上面的命令,但是這種方法具有跨平臺的問題,使錯誤處理困難。我寧願使用API​​。

我很樂意使用command.coffee的確切功能,但我無法弄清楚。

附錄:我看到require('coffee-script').compile,它將字符串編譯爲另一個字符串。這仍然會讓我去做循環播放文件和子文件夾以及編寫輸出的繁瑣工作。

+0

如果你也可以找到更豐富的API有用,請在Github上對功能請求發表評論https://github.com/jashkenas/coffee-script/issues/2386 – 2013-07-14 10:04:00

回答

11

您正在查找的API位於coffee-script.coffee。它導出一個compile函數,它能夠完成它在錫上所描述的功能。

要直接使用command.coffee的run函數,您必須首先用您在命令行上傳遞的選項覆蓋process.argv

+0

謝謝我試着重寫'process.argv '但我沒有把它關掉。你有一個例子嗎? – 2012-03-28 22:09:06

+2

這適用於我:'command = require'coffee-script/lib/coffee-script/command','process.argv.push'-o','lib','-c','src'','' command.run()'。 – 2012-03-28 22:23:14

+0

返回值告訴我命令是否成功? – 2012-03-28 22:44:45

7

只需使用節點的fs API + coffeescript.compile

fs = require 'fs' 
coffee = require 'coffee-script' 

fs.readFile 'source.coffee', 'utf8', (err, data) -> 
    compiled = coffee.compile data 
    fs.writeFile 'source.js', compiled, (err) -> 
     console.log "Done." 

而且看一看的CoffeeScript自己Cakefile(使用子進程):https://github.com/jashkenas/coffee-script/blob/master/Cakefile

0

感謝約旦和萊納斯我寫道:

command = require('iced-coffee-script/lib/coffee-script/command') 
process.argv[2..]=['-o','lib','-c','src'] 
command.run() 

突出問題:run函數提前返回,並且沒有回調來報告錯誤:\