update tutorial node ejemplos actualizar javascript coding-style node.js dry coffeescript

javascript - tutorial - La mejor manera de requerir varios módulos en NodeJS



npm (3)

Jugué con la idea hace algún tiempo y terminé con esto:

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

Terminó rascándolo y simplemente lo hace de la manera habitual - termina siendo una molestia más grande. Hay muchas veces en las que necesita tomar la propiedad de un módulo o utilizar un esquema de nombres diferente. Además, asignar al alcance global no es lo mismo que un require "normal". Alinear asignaciones hace que sea más fácil leer:

connect = require ''connect'' express = require ''express'' mongoose = require ''mongoose'' coffee = require ''coffee-script'' fs = require ''fs'' { exec } = require ''child_process''

Solo estás haciendo esto una vez, el resumen es solo una complejidad innecesaria.

No me gusta mucho la forma estándar de requerir módulos, que es algo como esto:

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

No es exactamente SECO. ¡En un modesto servidor CoffeeScript, el requerimiento de baile ocupa una parte considerable de todo el guión! He estado jugando con la siguiente alternativa:

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

Dado que no he visto personas que intenten refaccionar el enfoque estándar, pensé en preguntar si parece razonable hacerlo, y si es así, ¿hay alguna forma mejor de hacerlo?


Tenga en cuenta que coffee-script no es un identificador válido, por lo que su código realmente no lo está importando correctamente. Puede usar los literales de objeto flexibles de CoffeeScript para manejar esto bastante bien. También usaría ?= Para evitar la innecesaria reimportación de módulos. A partir de la respuesta de user211399 :

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

Como le estoy permitiendo importar con diferentes identificadores en diferentes módulos, usar el espacio de nombres global se siente particularmente inseguro. Los importaría localmente, como se muestra a continuación. Tenga en cuenta que, debido a que esto utiliza eval , puede no fallar correctamente si especifica un identificador ilegal.

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


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