web-dev-qa-db-fra.com

Définition d'une variable globale pour Browserify

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.

32
sebastiannm

É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):

  • dans spine.js: global.Spine = module.exports
  • dans tout autre fichier .js fourni par browserify: global.Spine = require('spine')
  • dans une balise de script ou un fichier .js référencé par le fichier .html, après le fichier spine.js: window.Spine = require('spine')
56
David Bonnet

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.

La vraie réponse.

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.

TLDR

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").

16
Han Yolo