9
votes

Comment écrire un module qui fonctionne avec node.js, exigerjs ainsi que sans eux

Je travaille sur une bibliothèque JavaScript pour Traitement JSON / XML . Ma bibliothèque fonctionne dans le navigateur ainsi que le nœud.js (avec xmldom code> et xmlhttprequest code> modules).

L'un des utilisateurs a récemment demandé le support requis. J'ai examiné la chose requisjs / amd et pense que c'est une bonne approche, je voudrais donc fournir cela. P>

Cependant, j'aimerais conserver la portabilité: ma bibliothèque doit travailler dans des navigateurs (avec et sans exigence) ainsi que nœud.js. Et dans l'environnement du navigateur, je ne dépends pas de xmldom code> ou xmlhttprequest code> car ces éléments sont fournis par le navigateur lui-même. P>

ma question est: Comment puis-je implémenter ma bibliothèque de sorte qu'elle fonctionne dans les navigateurs ainsi que dans Node.js avec un sans exigence? strong> p>

Un peu d'histoire et ma solution actuelle P>

J'ai initialement écrit ma bibliothèque pour les navigateurs. Donc, cela vient de créer un objet global de portée et de tout mettre à l'intérieur: p> xxx pré>

plus tard sur les utilisateurs ont demandé à Node.js support. J'ai donc ajouté: p> xxx pré>

J'ai également dû importer peu de modules mentionnés ci-dessus. Je l'ai fait conditionnellement, selon que la fonction nécessite code> soit disponible ou non: p> xxx pré>

Il y a cette histoire avec ExigenceJS. Si requisjs est présent, la fonction nécessite code> est également présente. Mais le chargement du module fonctionne différemment, je dois utiliser la fonction définir code>, etc. Je ne peux pas non plus que exiger code> des choses depuis exiger code> a une API ASYNC en exigejs. De plus, si ma bibliothèque est chargée via ExigenceJS, il semble traiter le code source et détecter le code nécessite ("quelque chose") code> même si je le fais conditionnellement p>

if (typeof _jsonix_xmlhttprequest !== 'undefined')
{
    var XMLHttpRequest = _jsonix_xmlhttprequest.XMLHttpRequest;
    return new XMLHttpRequest();
}


1 commentaires

Cela peut être utile: github.com/umdjs/umd


3 Réponses :


8
votes

Regardez comment Underscore.js gère-le. XXX

... xxx


0 commentaires

5
votes

C'est ce que j'ai fini avec: xxx


0 commentaires

-2
votes

Voici un modèle que j'utilise actuellement, il est à la fois compatible AMD et nœud, bien que pas directement chargable autonome dans le navigateur ...

L'avantage principal de cette approche est que le code spécifique au domaine ne Besoin de se soucier de ce que l'importait, pour l'affaire Général. P>

/**********************************************************************
* 
*
*
**********************************************************************/
((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define)(
function(require){ var module={} // makes module AMD/node compatible...
/*********************************************************************/




/*********************************************************************/




/**********************************************************************
* vim:set ts=4 sw=4 :                               */ return module })


0 commentaires