これらの関数をglobal
変数(ノードのバージョンのようなもの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のマスターで削除されたようです。おそらくこのように使用することを意図したものではありませんでした:(
アップデート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を作成する」ことです。実際には何も再実装していません。このハッキーなソリューションに基づいて、次のようなことができます。
#! /usr/bin/env coffee
# REPL functions.
global.pp = (obj) -> JSON.stringify(obj)
# Start the REPL.
require 'coffee-script/lib/coffee-script/repl'
そして、そのスクリプトを新しいREPLとして使用します。通常のCoffeeREPLに加えて、新しい機能とまったく同じように機能します(矢印キーやTAB補完に問題はありません:)
-g
ところで、オプションをオンにせずにCoffeeScriptをインストールする必要があると思いますnpm
。
しかし、それは非常にハッキーな解決策です。これは、内部のCoffeeScript実装ファイル構造とその機能に依存しており、いつでも変更される可能性があります(実際、Nodeの1つに基づいて新しく改良されたCoffeeREPLでいくつかの作業が行われたことを認識しています...その機能はプログラムで使用できるように公開されるため、この種のハッキングはもはやハッキングではありません)。