在Coffeescript中将函数从模块导入到全局命名空间?

时间:2012-02-13 16:11:53

标签: node.js module coffeescript

从您的模块utils.coffee开始:

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

然后你的主文件:

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

foo()和bar()是你经常打电话的功能,所以你:

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

当模块中仅定义了少量函数时,此方法有效,但随着函数数量的增加而变得混乱。有没有办法将所有模块的功能添加到应用程序的命名空间?

6 个答案:

答案 0 :(得分:11)

使用extend(使用underscore或提供它的任何其他库。必要时自行编写):

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

答案 1 :(得分:5)

如果您不想使用下划线,您可以这样做:

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

答案 2 :(得分:3)

  

有没有办法将所有模块的功能添加到应用程序的命名空间?

没有。据我所知,这是你能做的最好的事情(使用CS'destructuring assignment):

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

答案 3 :(得分: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

答案 4 :(得分:1)

这是怎么回事:

global[k] = v for k,v of require './utils'

答案 5 :(得分:0)

这样的事情对我的观点来说是一个很好的方法:

utils.coffee

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

main.coffee

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