假设我想要pp
函数:
coffee> pp = (obj) -> JSON.stringify(obj)
[Function]
coffee> pp({cat: "fancy"})
'{"cat":"fancy"}'
coffee>
有没有办法可以在控制台加载时立即使用该功能?我正在查看coffee -r "utils.coffee"
,但是没有看到任何方法将所需的库放入命令行中可用的对象。看起来我可以改变repl.js
,但这似乎是一个坏主意。
答案 0 :(得分: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
命令行选项was removed in CoffeeScript's master。它可能不是以这种方式使用的:(
更新2 :还有另一种方法可以做到这一点!它不依赖于任何特定于命令的参数:
{ echo "require './utils'"; cat; } | 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”。没有真正重新实现任何东西。基于this hacky solution,您可以执行以下操作:
#! /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完成也没问题)。
BTW,我认为您需要安装CoffeeScript而-g
上没有npm
选项才能使用。
但这是一个非常黑客的解决方案。它依赖于内部的CoffeeScript实现文件结构及其功能,并且随时都可能发生变化(实际上,我知道在基于Node的一个新的改进的Coffee REPL中已经完成了一些工作......我希望该功能被暴露以编程方式使用,因此这些黑客不再是黑客攻击了。)
答案 1 :(得分:1)
看看@ Daniel's(丹尼尔泰勒)出色的nesh
,一个增强的节点shell,也会说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诉CoffeeScript - 以及您加载的代码语言必须相同。 修改:唯一的例外是您始终可以通过扩展名为.js
的文件加载JavaScript,即使在启动CoffeeScript REPL时也是如此。 (相比之下,启动CoffeeScript REPL时无法指定JS 字符串。)
要自动将'nesh配置文件'加载到CoffeeScript REPL中,您可以在shell配置文件中定义别名; e.g:
alias neshc='nesh -c -e ~/.nesh_profile.coffee'
更新:以下是如何使用与 JavaScript REPL完全相同的'nesh配置文件';使用process substitution动态执行JavaScript编译:
alias neshj='nesh -e <(coffee -bp ~/.nesh_profile.coffee)'
nesh
作为npm
包提供,因此您可以按照以下方式轻松安装:
sudo npm install nesh -g