【问题标题】:Import functions from module to global namespace in Coffeescript?将函数从模块导入到 Coffeescript 中的全局命名空间?
【发布时间】:2016-04-27 04:33:45
【问题描述】:

从您的模块 utils.coffee 开始:

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

然后你的主文件:

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

foo() 和 bar() 是你会经常调用的函数,所以你:

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

这种方法在模块中只定义了几个函数时有效,但随着函数数量的增加变得混乱。有没有办法将模块的所有功能添加到应用的命名空间中?

【问题讨论】:

    标签: node.js module coffeescript


    【解决方案1】:

    使用extend(与underscore 或任何其他提供它的库。如有必要,自己编写):

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 不错!我希望 Coffeescript 有一个相当于 Python 单行“import * from bar”的功能。
      • @knife 这是一条线,虽然不是一条线:global[k] = v for k,v of require './utils'
      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        另一种将所有模块函数导出到全局范围的方法,如下所示: 应用模块:

        (()->
            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
        

        【讨论】:

        • 有趣的想法!在将答案标记为正确之前,我将尝试一下。
        【解决方案5】:

        怎么样:

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

        【讨论】:

          【解决方案6】:

          我的意见是这样的:

          utils.coffee

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

          主咖啡

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

          【讨论】:

          • 我认为 OP 要求一种方法来 import 模块中的所有函数,而不是如何 export 模块中的所有函数。不过,这个建议很有用。
          • 是的,我认为你是对的。我在下面添加了另一个答案:)
          猜你喜欢
          • 1970-01-01
          • 2017-12-20
          • 2014-12-30
          • 2020-11-06
          • 1970-01-01
          • 2018-10-31
          • 2019-03-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多