如何从CoffeeScript脚本中启动CoffeeScript repl?
如果我做
repl = require 'repl' repl.start {useGlobal: true}
它启动一个节点repl。 我如何开始一个CoffeeScript repl呢?
谢谢
Nesh是一个尝试使这个更容易和可扩展的项目:
http://danielgtaylor.github.com/nesh/
它提供了一种embeddedREPL的方法,支持多种语言(如CoffeeScript),并提供asynchronous插件体系结构,支持在启动时在REPL的上下文中执行代码等。例如:
nesh = require 'nesh' nesh.loadLanguage 'coffee' nesh.start (err, repl) -> nesh.log.error err if err
它还支持一系列默认插件的选项,并公开了一些内置的便利function:
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
我认为coffee-script
模块不会导出REPLfunction以编程方式使用,就像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'
选项使派生命令从标准input读取并写入当前进程的标准输出。