在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 ','