2

假设我想要一个pp功能:

coffee> pp = (obj) -> JSON.stringify(obj)                      
[Function]                                                     
coffee> pp({cat: "fancy"})                                     
'{"cat":"fancy"}'                                              
coffee>    

有没有办法让我在控制台加载时立即使用该功能?我正在查看coffee -r "utils.coffee",但没有看到任何方法可以将所需的库放入命令行中可用的对象中。看起来我可以改变repl.js,但这似乎是个坏主意。

4

2 回答 2

1

您可以将这些函数放入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 中已经完成了一些工作......我希望该功能被公开以编程方式使用,因此这些黑客不再是黑客)。

于 2013-02-15T01:37:21.970 回答
1

看看@Daniel's (Daniel Taylor's) 的优秀nesh,一个增强的节点外壳,也说 CoffeeScript:http ://danielgtaylor.github.io/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 - 和您正在加载的代码的语言必须相同编辑:唯一的例外是您始终可以通过扩展名为的文件.js加载 JavaScript ,即使在启动 CoffeeScript REPL 时也是如此。(相比之下,您不能在启动 CoffeeScript REPL 时指定 JS字符串)。

要将“nesh 配置文件”自动加载到 CoffeeScript REPL 中,您可以在 shell 配置文件中定义一个别名;例如:

alias neshc='nesh -c -e ~/.nesh_profile.coffee'

更新:以下是您如何使用与JavaScript REPL 完全相同的“nesh 配置文件”;使用进程替换即时执行 JavaScript 编译:

alias neshj='nesh -e <(coffee -bp ~/.nesh_profile.coffee)'

neshnpm包的形式提供,因此您可以按如下方式轻松安装它:

sudo npm install nesh -g
于 2013-08-02T21:03:57.677 回答