29-08-2012, 09:34 PM
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 iffle: 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 :
contenu de routes.js
si l'on veut exporter un module directement sans passer par une méthode
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-browser...e-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...
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-browser...e-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...