2012-10-03 27 views
5

Lo que trato de hacer es adaptar mi jQuery-plugin para trabajar con jQuery en Node.js.

Por lo que entiendo, CommonJS en su forma más básica requiere una biblioteca para ser envuelto en un cierre, y ese cierre debe estar disponible como parámetro de un parámetro 'exports'. De esta forma, el código está claramente contenido en su propio espacio de nombres (a través de una variable nombrada) y no contamina el espacio de nombres global.

jQuery en sí debe caer bajo el espacio de nombres '$'.

Ala:

var $ = require(jquery); 

Pero mi plugin también debe caber debajo del espacio de nombres '$'.

código Plugin:

(function($) { 
    // plugin code goes here 
})(jquery); 

exports.jquery = jquery // will this work? 

Ex:

var $ = require(jquery); 
$ = require(jquery-csv.js); // will this work? 

para trabajar en el navegador, todo lo que esté configurado para que se puede llamar desde el espacio de nombres '$' a pesar de que mis módulos son configuración como un espacio de nombres secundario de '$' (es decir, '$ .csv').

¿Existe una forma estándar de hacer múltiples requerimientos en un solo espacio de nombres? Si no, hay una alternativa viable (por ejemplo, hacer una copia poco profunda en el código del complemento)?

Nota: El contenedor de funciones anónimas sigue el standard jquery guidelines.

Nota: Esta corrección se aplicará al complemento jquery-csv.

Respuesta

2

forma más sencilla que puedo pensar en hacer algo como esto estaría haciendo algo como lo siguiente:

var $ = require("jquery"); 
require("jquery-csv")($); 

eso también significa que sólo puede hacer algo como esto:

module.exports = exports = function (jquery) { 
    //You modify the jquery object here. 
}; 

Modificación de el objeto $ debe hacerse de acuerdo con las recomendaciones de jQuery plugins. Creeré que ya los conoces por lo que dijiste.

Estoy seguro de que alguien presentará una forma más inteligente :) pero esto debería funcionar por ahora. También podría simplemente devolver un objeto jquery modificado y luego asignarlo al objeto $ en el ámbito en el que originalmente incluyó el módulo.

+0

acabo de terminar la creación de mi env nodo y la solución fue aún más simple que eso. No es necesario que agregue una llamada de exportación al complemento porque está mutando un espacio de nombre existente. Al llamar requerir sin una asignación, actúa igual que la importación usando una etiqueta