J'utilise SpineJS (qui exporte un module commonjs) et il doit être disponible dans le monde entier car je l'utilise partout, mais il semble que je doive faire Spine = require('spine')
sur chaque fichier qui utilise Spine pour que les choses fonctionnent .
Existe-t-il un moyen de définir Spine
une fois pour le rendre globalement disponible?
PS: J'utilise Spine comme exemple, mais je me demande en général comment faire cela avec n'importe quelle autre bibliothèque.
Écrire Spine = require('spine')
dans chaque fichier est la bonne façon de procéder.
Pourtant, il existe plusieurs possibilités en utilisant l'objet global
ou window
(browserify définit l'objet global
sur window
, qui est l'espace de noms global):
global.Spine = module.exports
global.Spine = require('spine')
window.Spine = require('spine')
Tout d'abord, pour votre exemple, David a raison. Incluez toutes les dépendances dans chaque module dans lequel vous en avez besoin. C'est très détaillé, mais il n'y a pas de magie de compilation en cours qui atténue toutes sortes d'anti modèles et de futurs problèmes potentiels.
Ce n'est pas toujours pratique. Browserify accepte une option appelée insertGlobalVars
. Lors de la construction, chaque fichier diffusé est analysé pour identifier les identificateurs correspondant aux noms de clé fournis et encapsule le module dans un IIFE contenant des arguments qui résolvent chaque identificateur qui n'est pas affecté dans le module. Tout cela se produit avant la finalisation de l'arborescence des dépendances, ce qui vous permet d'utiliser require pour résoudre une dépendance.
Utilisez l'option insertGlobalVars
dans Browserify.
browserify({
insertGlobalVars: {
spine: function(file, dir) {
return 'require("spine")';
}
}
});
Pour chaque fichier analysé, s'il existe un identifiant spine
qui n'est pas attribué, résolvez-le par require("spine")
.