繁体   English   中英

在NodeJS中需要多个模块的最佳方法

[英]Best way to require several modules in NodeJS

我不太喜欢需要模块的标准方法,如下所示:

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

这不完全是DRY。 在一个适度的CoffeeScript服务器中,require舞蹈占据了整个脚本的一大块! 我一直在玩弄以下替代方案:

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

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

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

global[id] ?= require name for id, name of {
    "connect", "express", "redis", "sys", coffee: "coffee-script", "fs" }

                                                                    [Compile to JS]

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

eval "#{id} = require(#{JSON.stringify name})" name for id, name of {
    "connect", "express", "redis", "sys", coffee: "coffee-script", "fs" }

                                                                    [Compile to JS]

我不久前玩弄了这个想法,结果是:

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'

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

global[lib] = require lib for lib in "connect,express,redis,sys,coffee-script,fs".split ','

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM