[英]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.