JeuWeb - Crée ton jeu par navigateur
Une alternative à RequireJS - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Une alternative à RequireJS (/showthread.php?tid=6339)



Une alternative à RequireJS - Maks - 29-08-2012

J'aimerais vous présenter une alternative à RequireJS 2.0. RequireJS est aynschrone, il a donc l'avantage d'être relativement rapide. Cependant, il pose le problème des circular dependencies. Si la classe A a besoin de la classe B et inversement, comment gérer l'ordre de chargement ? Bien sûr il y a des solutions, qui font un peu rafistolage Confusediffle: Une alternative étant de passer par la directive "shim" (remplaçant du plugin "order" de RequireJS 1.0) dans la configuration de Require afin de gérer (de façon synchrone) quel fichier doit être chargé avant l'autre.

L'idéal serait d'avoir les modules CommonJS de Node dans le navigateur. C'est ce que "browserify" propose.

https://github.com/substack/node-browserify

Un petit rappel sur comment ça marche :


express = require('express'); // pour les modules de /node_modules
routes = require('./routes'); // chemin relatif pour les modules persos
// l'extension n'est pas obligatoire, require cherche d'abord un .js, puis un .json (un .node aussi mais osef), peut être étendu à coffee, yaml...

var app = express();
routes.run(app); // par exemple

contenu de routes.js



exports.run = function(app) {
// routing
};
ou bien


var run = function(app) {
// routing
};

exports.run = run


si l'on veut exporter un module directement sans passer par une méthode



module.exports = function() {
// do smthg
};


C'est assez simple, il n'y a que 3 mots clés : require, module et exports (les mêmes que pour RequireJS).

Donc pour en revenir à browserify, il permet d'obtenir ce mode de fonctionnement dans le navigateur.
Un exemple concret : https://github.com/substack/node-browserify/tree/master/example/simple-build/js

Plus fort encore, il permet d'utiliser les modules de Node dans le browser à l'aide d'une librairie supplémentaire : https://github.com/substack/js-traverse
Ainsi on peut carrément utiliser la machine virtuelle de Node dans le navigateur : https://github.com/substack/vm-browserify
Et d'autres libraires utiles comme assert, path, crypto...