【问题标题】:Best way to require several modules in NodeJS在 NodeJS 中需要多个模块的最佳方法
【发布时间】:2011-08-31 20:16:29
【问题描述】:

我不太喜欢 require 模块的标准方式,它是这样的:

connect = require 'connect'
express = require 'express'
redis = require 'redis'
sys = require 'sys'
coffee = require 'coffee-script'
fs = require 'fs'

它并不完全干燥。在一个普通的 CoffeeScript 服务器中,require 舞蹈占据了整个脚本的相当一部分!我一直 toying 有以下替代方案:

"connect,express,redis,sys,coffee-script,fs"
  .split(',').forEach (lib) -> global[lib] = require lib

由于我没有看到有人尝试重构标准方法,我想我想问一下这样做是否合理,如果是,有没有更好的方法来做到这一点?

【问题讨论】:

  • 智能问题。收藏,希望能学到一些很酷的东西:D
  • 我不相信全局范围参数。毕竟,NPM 无论如何都意味着一个全局命名空间。这当然是一个需要考虑的权衡,因为在执行基础设施级别的需求语句时,业务/应用程序逻辑的直接中断有明显的缺点。
  • @mahemoff 您应该阅读全局范围。出于正常原因,这显然是邪恶的。

标签: javascript coding-style node.js dry coffeescript


【解决方案1】:

请注意,coffee-script 不是有效标识符,因此您的代码并未真正正确地导入它。您可以使用 CoffeeScript 灵活的对象文字来很好地处理这个问题。我还会使用?= 来避免不必要地重新导入模块。以user211399's answer为基础:

global[id] ?= 需要 id 的名称,{ 的名称 “connect”、“express”、“redis”、“sys”、coffee:“coffee-script”、“fs”} [Compile to JS]

由于我允许您在不同的模块中使用不同的标识符进行导入,因此使用全局命名空间感觉特别不安全。我会改为在本地导入它们,如下所示。请注意,由于它使用 eval,因此如果您指定非法标识符,它可能不会正常失败。

eval "#{id} = require(#{JSON.stringify name})" id 的名称,{ 的名称 “connect”、“express”、“redis”、“sys”、coffee:“coffee-script”、“fs”} [Compile to JS]

【讨论】:

  • 它是一个有效的标识符。您只需将其称为global["coffee-script"]
  • @Raynos:您可以将其用作对它的引用,但这并不是作为标识符的含义(ECMA-262 5e Section 7.6Section 10.3.1Section 11.1.2)。如果您正常导入它,这也不是您引用它的方式,这就是为什么我不认为它是“真正正确地导入它”。
【解决方案2】:

我前段时间玩弄过这个想法,最后得到了这个:

global[mod.replace /\W/g, ''] = require mod for mod in [
    "connect"
    "express"
    "redis"
    "sys"
    "coffee-script"
]

最后只好按常规方式进行操作 - 麻烦更大了。很多时候您需要获取模块的属性或使用不同的命名方案。此外,分配给全局范围与“普通”require 不同。对齐作业更容易阅读:

connect  = require 'connect'
express  = require 'express'
mongoose = require 'mongoose'
coffee   = require 'coffee-script'
fs       = require 'fs'
{ exec } = require 'child_process'

你只做一次,抽象它只是不必要的复杂性。

【讨论】:

    【解决方案3】:
    global[lib] = require lib for lib in "connect,express,redis,sys,coffee-script,fs".split ','
    

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 2017-02-02
      • 2012-09-03
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多