Définition du module pour travailler avec node.js, require.js et avec des balises de script simples

Je travaille sur un module / une bibliothèque javascript qui devrait fonctionner dans 3 environnements:

  1. dans node.js
  2. dans les requirejs
  3. quand simplement inclus en utilisant des balises dans la page Web. Dans ce cas, le module entier doit être connecté sous window.myModule

Avez-vous des suggestions sur la manière d’écrire la structure de la bibliothèque afin qu’elle fonctionne dans tous ces environnements?

EDIT: fondamentalement, je veux dire une sorte de code d’emballage autour de la bibliothèque afin que je puisse appeler le fichier à partir de l’une de ces trois méthodes, et ça va.

Cette exigence et sa solution sont appelées UMD (Universal Module Definition) . C’est actuellement un projet de proposition. Le contexte et l’état actuel sont décrits dans l’article Addy Osmani – Ecriture de code JavaScript modulaire avec AMD, article CommonJS & ES Harmony . Recherchez le lien “UMD” pointant vers différents modèles que vous pouvez utiliser.

On trouve de nombreux autres modèles sur le Web – UMD est le mot clé de recherche.

(n’a pas encore trouvé le dernier lien moi-même 🙂

Nous travaillons sur la même chose, je pense.

Et nous avons du succès. Nous avons une bibliothèque (nous l’appelons ‘slib’), compilée dans des fichiers AMD js. Il ne dépend pas des modules npm ni du navigateur, il peut donc être appelé depuis un noeud et depuis un navigateur.

1) Pour l’appeler depuis un noeud, on utilise requirejs:

fichier require.conf.js

module.exports = function(nodeRequire){ global.requirejs = require('requirejs'); requirejs.config({ baseUrl: __dirname+"/../web/slib/", paths: { slib: "." }, nodeRequire: nodeRequire }); } 

Dans tout autre fichier serverside (nodejs), nous ajoutons cette ligne au début

 require("./require.conf")(require); 

alors nous appelons le code de slib par:

 var Computation = requirejs("slib/Computation"); 

2) Pour appeler slib depuis un navigateur, nous utilisons simplement requirejs. Il gère tout bien.

3) Nous n’avons pas besoin d’appeler directement slib depuis

Il semble que vous pouvez utiliser browserfy pour rendre certains modules npm accessibles à partir du code de slib, mais nous n'avons pas encore essayé. De plus, je pense que l’utilisation de requirejs du côté du noeud peut être plus simple (pourquoi avons-nous besoin d’une deuxième fonction 'requirejs' avec celle du noeud?) Nous n’avons tout simplement pas bien étudié la question, mais cela fonctionne.

Dans n'importe quel module slib, vous pouvez écrire

 if (window) window.module1 = this // or whatever 

et il sera exporté en tant que vieille librairie js lors du chargement