您可以将这些函数放入global
变量中(这是 Node 的版本window
),然后使用该-r
选项。
# utils.coffee
global.pp = (obj) -> JSON.stringify(obj)
然后运行,同样直接 utils.coffee 的:
coffee -r ./utils
它应该启动一个 CoffeeScript REPL 并具有pp
可用作全局变量的函数:
coffee> pp ohmy: 'neat'
'{"ohmy":"neat"}'
更新:似乎-r
命令行选项已在 CoffeeScript 的 master 中删除。它可能不应该以这种方式使用:(
更新 2:还有另一种方法可以做到这一点!而且它不依赖于任何特定于命令的参数:
{ echo "require './utils'"; cat; } | coffee
但是,它不会像 Coffee REPL 那样 100% 工作。例如,箭头键似乎不起作用。
编辑(jc):使用此方法可以为节点进行卸载,这很方便:
# utils.coffee
global.unload = (moduleName) ->
cacheName = require.resolve(moduleName)
delete require.cache[cacheName]
$ coffee -r ~/Dev/utils.coffee
coffee> unload
[Function]
更新 3:另一种可能性是“创建自己的 REPL”。并没有真正重新实现任何东西。基于这个 hacky 解决方案,您可以执行以下操作:
#! /usr/bin/env coffee
# REPL functions.
global.pp = (obj) -> JSON.stringify(obj)
# Start the REPL.
require 'coffee-script/lib/coffee-script/repl'
然后将该脚本用作您的新 REPL。它将像普通的 Coffee REPL 一样工作,加上新功能(箭头键和 TAB 完成都没有问题 :)
顺便说一句,我认为您需要安装 CoffeeScript 而没有启用该-g
选项的选项npm
。
这是一个非常hacky的解决方案。它依赖于内部的 CoffeeScript 实现文件结构及其功能,并且随时可能改变(事实上,我知道在基于 Node 的新改版的 Coffee REPL 中已经完成了一些工作......我希望该功能被公开以编程方式使用,因此这些黑客不再是黑客)。