簡體   English   中英

如何從CoffeeScript腳本中啟動CoffeeScript repl?

[英]How do I start a CoffeeScript repl from within a CoffeeScript script?

如果我做

repl = require 'repl'

repl.start {useGlobal: true}

它啟動一個Node repl。 如何啟動CoffeeScript repl呢?

謝謝

我認為coffee-script模塊不會導出REPL功能以便以編程方式使用,就像Node repl模塊那樣。 但是CoffeeScript有一個可以使用的repl.coffee文件,即使它沒有在主coffee-script模塊中導出。 command.coffee提示 (這是運行coffee命令時執行的文件),我們可以看到REPL只需要repl文件即可。 因此,運行此腳本應啟動CoffeeScript REPL:

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

然而,這種方法非常糟糕 最重要的缺陷是它在很大程度上取決於coffee-script模塊在內部的工作方式以及它的組織方式。 沒有什么能阻止repl.coffee文件從coffee-script/lib/coffee-script ,或者改變它的工作方式。

一個更好的方法可能是調用沒有參數的coffee命令,就像從命令行那樣,從Node調用:

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

stdio: 'inherit'選項使得生成的命令從stdin讀取並寫入當前進程的stdout。

Nesh是一個嘗試使這更容易和可擴展的項目:

http://danielgtaylor.github.com/nesh/

它提供了一種嵌入REPL的方法,支持多種語言,如CoffeeScript,並提供異步插件架構,支持在啟動時在REPL的上下文中執行代碼等。例如:

nesh = require 'nesh'

nesh.loadLanguage 'coffee'

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

它還支持一組帶有默認插件的選項,並且還公開了一些內置的便利功能:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM