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変数(ノードのバージョンのようなもの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でいくつかの作業が行われたことを認識しています...その機能はプログラムで使用できるように公開されるため、この種のハッキングはもはやハッキングではありません)。

于 2013-02-15T01:37:21.970 に答える
1

@Daniel(Daniel Taylor)の優れたnesh、CoffeeScriptも話す拡張ノードシェルをご覧ください:http://danielgtaylor.github.io/nesh/

pp関数をCoffeeScriptREPLにロードする方法は次のとおりです。

nesh -c -e 'pp = (obj) -> JSON.stringify(obj)'

~/.nesh_profile.coffee同様に、 (シェルプロファイルのロードに類似した)ファイルをロードする場合は、起動時に次を使用します。

nesh -c -e ~/.nesh_profile.coffee

小さな注意点:REPL言語(JavaScript v。CoffeeScript)と、ロードするコードの言語は同じである必要があります編集:唯一の例外は、CoffeeScript REPLを開始する場合でも、拡張子がのファイルを介してJavaScriptをいつでもロードできることです。.js(対照的に、CoffeeScript REPLを開始するときにJS文字列を指定することはできません)。

'neshプロファイル'のCoffeeScriptREPLへのロードを自動化するために、シェルプロファイルでエイリアスを定義できます。例えば:

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

更新: JavaScriptREPLでまったく同じ「neshプロファイル」を使用する方法は次のとおりです。JavaScriptへのコンパイルは、プロセス置換を使用してオンザフライで実行されます。

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

neshnpmパッケージとして入手できるため、次のように簡単にインストールできます。

sudo npm install nesh -g
于 2013-08-02T21:03:57.677 に答える