Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Реальный ответ.

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

TL;DR

Используйте параметр insertGlobalVars в Browserify.

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

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