[英]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.