2012-10-10 37 views
4

如果我做如何從CoffeeScript腳本中啓動CoffeeScript repl?

repl = require 'repl' 

repl.start {useGlobal: true} 

它啓動一個節點REPL。我如何開始使用CoffeeScript repl?

感謝

+0

http://coffeescript.org/documentation/docs/repl.html –

+0

這就是我最後做,但我認爲會有一個更好的解決方案。 – Nick

回答

5

NESH是一個項目,試圖使這個更容易一點的,可擴展:

​​

它提供了一種嵌入有多個語言,如CoffeeScript的支持REPL以及提供asyncronous插件架構,支持在啓動REPL,等。例如上下文中執行代碼:

nesh = require 'nesh' 

nesh.loadLanguage 'coffee' 

nesh.start (err, repl) -> 
    nesh.log.error err if err 

它還支持了一堆用默認插件選項,並暴露了一些內置方便FUNC蒸發散還有:

opts = 
    welcome: 'Welcome to my interpreter!' 
    prompt: '> ' 
    evalData: CoffeeScript.compile 'hello = (name="world") -> "Hello, #{world}!"', {bare: true} 

nesh.start opts, (err, repl) -> 
    nesh.log.error err if err 
+1

很高興在這裏見到你,丹尼爾。現在我明白了Coffee REPL增強的動機來自:D – epidemian

+1

第一次嘗試時,看起來像nesh REPL沒有附加到它的運行上下文(在node.js中),當它使用第一個代碼段啓動它的REPL時這個答案。任何可以使它從啓動位置的上下文啓動的東西? – matanster

+1

@matt有一個nesh的修復程序,已準備就緒,但它正在等待上游的CoffeeScript發行版。看到這裏:https://github.com/danielgtaylor/nesh/issues/4#issuecomment-22157603 – Daniel

5

我認爲coffee-script模塊不導出REPL功能以編程方式使用,如節點repl模塊一樣。但CoffeeScript有一個repl.coffee文件可以使用,即使它不在主模塊coffee-script中導出。以a hint from command.coffee(這是執行coffee命令時執行的文件),我們可以看到REPL只需要repl文件。因此,運行此腳本應該啓動CoffeeScript的REPL:

require 'coffee-script/lib/coffee-script/repl' 

這種做法,但是,相當哈克。最重要的缺陷在於它很大程度上取決於模塊在內部的工作方式以及它的組織方式。沒有什麼能夠阻止repl.coffee文件從coffee-script/lib/coffee-script中移出,或者改變它的工作方式。

一個更好的辦法來調用一個不帶參數的coffee命令,就像人們從命令行做的,從節點:

{spawn} = require 'child_process' 
spawn 'coffee', [], stdio: 'inherit' 

stdio: 'inherit' option使得催生命令從標準輸入讀取和寫入到標準輸出目前的過程。

+0

謝謝!我想我仍然需要這個文件,因爲我試圖允許訪問當前的流程變量。 – Nick

+0

..unless stdio:'固有'是否... – Nick

+0

@尼克,我很高興它幫助:)。我的理解是'stdio:'inherit''只是讓生成的進程使用與生成它的進程相同的stdin和stdout,但它將成爲一個新進程(process.pid將會與此不同)。如果我的答案不是你想要的,也許你可以通過解釋你試圖用REPL本身完成的事情來擴展這個問題。 – epidemian