2013-02-14 26 views
2

比方說,我想有一個pp功能:可以在開始之前將功能附加到咖啡控制檯嗎?

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

有,我可以有一個功能是可以立即從控制檯負載時的方法嗎?我正在查看coffee -r "utils.coffee",但沒有看到任何方法將需要的庫放入命令行提供的對象中。它看起來像我可能會改變repl.js,但這似乎是一個壞主意。

回答

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命令行選項was removed in CoffeeScript's 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」。沒有真正重新實現任何東西。基於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。它的工作完全一樣的普通咖啡REPL加上新功能(帶有箭頭鍵也不TAB完成:)

BTW沒有問題,我想你會需要有沒有-g選項安裝上npm對於工作的CoffeeScript 。

雖然這是一個非常hacky的解決方案。它依賴於內部的CoffeeScript實現文件結構及其功能,並且可以在任何時候改變(事實上,我知道在基於Node的一個新的改進的Coffee REPL中已經完成了一些工作......我希望該功能暴露出來以編程方式使用,所以這些黑客不再是黑客)。

+0

謝謝。誹謗它被刪除。我希望Coffee REPL更像irb。我會使用這種技術,只是在命令行別名咖啡 - 直到它消失:( – jcollum 2013-02-15 16:33:06

+0

@jcollum我再次更新我的答案:)。順便說一句,當我發現'-r'選項被刪除,我[問unix.stackexchange](http://unix.stackexchange.com/questions/64841/how-to-send-text-toa-a-然後從終端讀命令)如何將一些文本發送到命令的stdin,然後讓命令繼續讀取終端。也許這些答案也是你感興趣的:) – epidemian 2013-02-16 11:03:39

1

看一看@丹尼爾(丹尼爾·泰勒的)優秀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訴CoffeeScript - 以及您所加載代碼的語言必須相同編輯:唯一的例外是,即使啓動CoffeeScript REPL,您也可以始終通過文件和擴展.js加載JavaScript。 (相比之下,啓動CoffeeScript REPL時,不能指定JS 字符串)。

要自動將'nesh配置文件'加載到CoffeeScript REPL中,您可以在shell配置文件中定義一個別名;例如: -

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

更新:這是你如何使用同樣的「NESH曲線」與的JavaScript REPL;編譯到JavaScript是使用process substitution動態執行:

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

nesh可作爲npm包,讓您可以輕鬆地安裝如下:

sudo npm install nesh -g 
相關問題