Coffeescript 我可以在咖啡控制台启动前将功能连接到它吗?
假设我想要一个Coffeescript 我可以在咖啡控制台启动前将功能连接到它吗?,coffeescript,Coffeescript,假设我想要一个pp函数: coffee> pp = (obj) -> JSON.stringify(obj) [Function] coffee> pp({cat: "fancy"}) '{"cat":"fancy"}'
pp
函数:
coffee> pp = (obj) -> JSON.stringify(obj)
[Function]
coffee> pp({cat: "fancy"})
'{"cat":"fancy"}'
coffee>
有没有一种方法可以在控制台加载时立即使用该功能?我正在查看
coffee-r“utils.coffee”
,但没有找到任何方法将所需的库放入命令行中可用的对象中。看起来我可能可以修改repl.js
,但这似乎是个坏主意 您可以将这些函数放入全局
变量(类似于节点版本的窗口
)中,然后使用-r
选项
# utils.coffee
global.pp = (obj) -> JSON.stringify(obj)
然后直接在相同的utils.coffee上运行:
coffee-r./utils
它应该启动CoffeeScript REPL,并将pp
函数作为全局变量提供:
coffee>pp欧姆:“干净”
“{”欧姆“:“整洁”}”
更新:似乎是-r
命令行选项。它可能不打算这样使用:(
更新2:还有另一种方法可以做到这一点!它不依赖于任何命令特定的参数:
{ echo "require './utils'"; cat; } | coffee
然而,它不会像咖啡应答器那样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”。实际上不需要重新实现任何内容。基于此,您可以执行以下操作:
#! /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和新函数完全相同(箭头键和制表符完成都没有问题:)
顺便说一句,我认为您需要在npm
上安装CoffeeScript,而不使用-g
选项才能工作
不过,这是一个非常粗糙的解决方案,它依赖于内部CoffeeScript实现文件结构及其功能,并且随时可能发生变化(事实上,我知道在Node的基础上改进的Coffee REPL中已经做了一些工作……我希望能够以编程的方式使用这些功能,这样这些黑客就不再是黑客了)。看看@Daniel's(Daniel Taylor's)卓越的nesh
,一个增强的节点外壳,也能讲咖啡脚本:
下面是如何将pp
函数加载到CoffeeScript REPL中:
nesh -c -e 'pp = (obj) -> JSON.stringify(obj)'
类似地,如果您想加载一个文件,比如说~/.nesh_profile.coffee
(类似于加载shell配置文件),在启动时使用:
nesh -c -e ~/.nesh_profile.coffee
小提示:REPL语言-JavaScript v.CoffeeScript-和您正在加载的代码的语言必须相同。Edit:唯一的例外是,您始终可以通过扩展名为.js
的文件加载JavaScript,即使在启动CoffeeScript REPL时也是如此。(相比之下,启动CoffeeScript REPL时不能指定JS字符串)
要自动将“nesh配置文件”加载到CoffeeScript REPL中,您可以在shell配置文件中定义别名;例如:
alias neshc='nesh -c -e ~/.nesh_profile.coffee'
更新:下面是如何将相同的“nesh配置文件”与JavaScript REPL一起使用;JavaScript编译是通过以下方式动态执行的:
谢谢。很遗憾它被删除了。我希望Coffee REPL对我来说更像irb。我将使用此技术,并在命令行中别名Coffee——直到它消失:(@jcollum我再次更新了我的答案:).BTW,当我发现
-r
选项被删除时,我想知道如何将一些文本发送到命令的stdin,然后让命令继续从终端读取。也许你也对这些答案感兴趣:)
alias neshj='nesh -e <(coffee -bp ~/.nesh_profile.coffee)'
sudo npm install nesh -g