Определение глобальной переменной для Browserify

Я использую SpineJS (который экспортирует модуль commonjs), и он должен быть доступен во всем мире, потому что я использую его везде, но похоже, что мне нужно делать Spine = require('spine') для каждого файла, который использует Spine для Работа.

Есть ли способ определить Spine один раз, чтобы сделать его доступным по всему миру?

PS: Я использую Spine в качестве примера, но мне вообще интересно, как это сделать с любой другой библиотекой.

Написание Spine = require('spine') в каждом файле – это правильный способ сделать.

Тем не менее, существует несколько возможностей с помощью global или window объекта (браузеру задает global объект в window , который является глобальным пространством имен):

  • в spine.js: global.Spine = module.exports
  • в любом другом .js-файле, связанном с global.Spine = require('spine') : global.Spine = require('spine')
  • в теге скрипта или файле .js, на который ссылается файл .html, после файла window.Spine = require('spine') : window.Spine = require('spine')

Прежде всего, для вашего примера Давид прав. Включите все зависимости в каждом модуле, в котором вы нуждаетесь. Это очень многословие, но не существует магии времени компиляции, которая устраняет всевозможные анти-шаблоны и потенциальные будущие проблемы.

Настоящий ответ.

Это не всегда практично. Browserify принимает параметр, называемый insertGlobalVars . При сборке каждый streamовый файл сканируется для идентификаторов, соответствующих указанным именам ключей, и обертывает модуль в аргументах, содержащих ИИИФ, которые разрешают каждый идентификатор, который не назначен в модуле. Все это происходит до того, как дерево зависимостей будет завершено, что позволит вам использовать требование для разрешения зависимости.

TLDR

Используйте опцию insertGlobalVars в Browserify.

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

Для каждого сканируемого файла, если существует идентификатор spine который не назначен, разрешите его по require("spine") .

Давайте будем гением компьютера.