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

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

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

这不完全是干的。 在一个适中的CoffeeScript服务器中,require舞需要占用整个脚本的一小部分! 我一直在玩弄以下select:

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

既然我还没有看到有人试图重构标准方法,我想我会问这样做是否合理,如果是的话,有没有更好的方法来做到这一点?

请注意, coffee-script不是一个有效的标识符,所以你的代码是不是真正的导入它。 您可以使用CoffeeScript的灵活的对象文字来处理这个很好的。 我也使用?=来避免不必要的重新导入模块。 build立closuresuser211399的答案 :

 global [id]?=要求名称为id,名称为{
     “connect”,“express”,“redis”,“sys”,coffee:“coffee-script”,“fs”}

                                                                     [ 编译为JS ]

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

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

                                                                     [ 编译为JS ]

前一段时间我玩弄了这个想法,最后得出这个结论:

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

结束了抓它,只是按照惯常的方式 – 它最终成为一个更大的麻烦。 有很多时候你需要抓住一个模块的属性或使用不同的命名scheme。 另外,分配到全局范围与“正常” require不一样。 alignment作业使得阅读更容易:

 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 ',' 
Interesting Posts