2012-02-13 26 views
4

開始你的模塊,utils.coffee:從模塊到Coffeescript中的全局名稱空間導入函數?

exports.foo = -> 
exports.bar = -> 

然後你的主文件:

utils = require './utils' 
utils.foo() 

FOO()和bar()是函數,你會經常打電話,所以你:

foo = require('./utils').foo 
bar = require('./utils').bar 
foo() 

當模塊中只定義了一些函數,但隨着函數數量的增加,這種方法變得混亂。有沒有辦法將所有模塊的函數添加到您的應用程序的名稱空間?

回答

3

有沒有辦法將所有模塊的函數添加到您的應用程序的命名空間?

號這是,據我所知,最好的,你可以做(​​使用CS」 destructuring assignment):

{foo, bar, baz} = require('./utils') 
11

使用extend(與underscore或提供任何其他圖書館把它寫自己如果需要的話):

_(global).extend(require('./utils')) 
0

類似的東西是一個好方法,我的意見:

utils.coffee

module.exports = 
    foo: -> 
     "foo" 
    bar: -> 
     "bar" 

main.coffee

util = require "./util" 
console.log util.foo() 
+0

我認爲任擇議定書要求的方式來_import_從一個模塊的所有功能,不如何在模塊中導出所有函數。但是,這些建議很有用。 – tokland 2012-02-14 09:01:22

+0

是的,我認爲你是對的。我在下面添加了另一個答案:) – 2012-02-14 12:04:47

1

另一種方式出口的所有模塊的功能,以全球範圍內,像這樣: 應用模塊:

(()-> 
    Application = @Application =() -> 
     if @ instenceof Application 
      console.log "CONSTRUCTOR INIT" 
    Application::test =() -> 
     "TEST" 

    Version = @Version = '0.0.0.1' 
)() 

主要應用:

require './Application' 

App = new Appication() 
console.log App.test() 
console.log Version 
+0

有趣的想法!在將答案標記爲正確之前,我會嘗試一下。 – knite 2012-02-14 16:51:03

5

如果你不想使用下劃線,你可以簡單地做:

var utils = require('./utils') 
for (var key in utils) 
    global[key] = utils[key] 
+0

不錯!我希望Coffeescript具有Python的單行「import * from bar」的等價功能。 – knite 2012-05-02 01:28:48

+2

@knife它是一條線,雖然不是一條線:global [k] = v for k,v of require'./utils' – 2013-09-07 21:45:53

1

這個怎麼樣:

global[k] = v for k,v of require './utils' 
相關問題