Definición de variable global para Browserify


Estoy usando SpineJS (que exporta un módulo commonjs) y necesita estar disponible globalmente porque lo uso en todas partes, pero parece que tengo que hacer Spine = require('spine') en cada archivo que usa Spine para que las cosas funcionen.

¿Hay alguna manera de definir Spine una vez para que esté disponible globalmente?

PD: Estoy usando Spine como ejemplo, pero en general me pregunto cómo hacer esto con cualquier otra biblioteca.

Author: Isaac Gregson, 2014-05-05

2 answers

Escribir Spine = require('spine') en cada archivo es la forma correcta de hacerlo.

Sin embargo, hay varias posibilidades al usar el objeto global o window (browserify establece el objeto global en window, que es el espacio de nombres global):

  • en la columna vertebral.js: global.Spine = module.exports
  • en cualquier otro .archivo js incluido por browserify: global.Spine = require('spine')
  • en una etiqueta de script o un .archivo js referenciado por el .archivo html, después del lomo.archivo js: window.Spine = require('spine')
 54
Author: David Bonnet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-06 14:39:03

En primer lugar, para tu ejemplo David es correcto. Incluye todas las dependencias en cada módulo en el que lo necesites. Es muy detallado, pero no hay magia de tiempo de compilación que alivie todo tipo de patrones anti y posibles problemas futuros.

La verdadera respuesta.

Esto no siempre es práctico. Browserify acepta una opción llamada insertGlobalVars. En la compilación, cada archivo transmitido se escanea en busca de identificadores que coincidan con los nombres de clave proporcionados y envuelve el módulo en un IIFE que contiene argumentos que resuelven cada identificador que no está asignado dentro del módulo. Todo esto sucede antes de que se finalice el árbol de dependencias, lo que le permite usar require para resolver una dependencia.

TLDR

Utilice la opción insertGlobalVars en Browserify.

browserify({
  insertGlobalVars: {
    spine: function(file, dir) {
      return 'require("spine")';
    }
  }
});

Para cada archivo escaneado, si existe un identificador spine que no está asignado, se resuelve como require("spine").

 11
Author: Han Yolo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-16 08:43:59