我不太喜欢需要模块的标准方法,如下所示:
connect = require 'connect'
express = require 'express'
redis = require 'redis'
sys = require 'sys'
coffee = require 'coffee-script'
fs = require 'fs'
这不完全是DRY。在一个适度的CoffeeScript服务器中,require舞蹈占据了整个脚本的一大块!我已经toying使用以下替代方法:
"connect,express,redis,sys,coffee-script,fs"
.split(',').forEach (lib) -> global[lib] = require lib
由于我没有看到人们尝试重构标准方法,我想我会问这样做是否合理,如果是这样,有没有更好的方法呢?
答案 0 :(得分:5)
请注意,coffee-script
不是有效的标识符,因此您的代码并未真正正确导入它。您可以使用CoffeeScript灵活的对象文字来处理这个问题。我还使用?=
来避免不必要地重新导入模块。建立user211399's answer:
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]
答案 1 :(得分:4)
前段时间我玩弄了这个想法,结果就是这样:
global[mod.replace /\W/g, ''] = require mod for mod in [
"connect"
"express"
"redis"
"sys"
"coffee-script"
]
结束抓它并按照通常的方式做 - 它最终成为一个更大的麻烦。有很多时候您需要获取模块的属性或使用不同的命名方案。此外,分配到全局范围与" normal"不同。 require
。对齐分配使其更易于阅读:
connect = require 'connect'
express = require 'express'
mongoose = require 'mongoose'
coffee = require 'coffee-script'
fs = require 'fs'
{ exec } = require 'child_process'
你只做过一次,抽象它只是不必要的复杂性。
答案 2 :(得分:3)
global[lib] = require lib for lib in "connect,express,redis,sys,coffee-script,fs".split ','