Как избежать избыточной инициализации Backbone/jQuery с помощью Chaplin и Browserify

Для использования Chaplin с Browserify и jQuery необходимо сделать следующее:

Backbone = require('backbone')
$ = require('jquery')
Backbone.$ = $
Chaplin = require('chaplin')

Это нужно писать КАЖДЫЙ РАЗ, когда вы require('chaplin'). Если вы пропустите это хотя бы один раз в любом модуле, который использует Chaplin, и если этот модуль будет инициализирован первым, то Chaplin будет сломан, потому что он инициализируется с использованием Chaplin без jQuery, но позже вы в конечном итоге установите Backbone.$ на jQuery, а Chaplin не ожидает, что .

Примером того, что это сломает, является представление Чаплина, которое будет инициализировано с использованием «appendChild» вместо «append» для containerMethod. Но этот элемент будет селектором jQuery, у которого нет appendChild.

Есть ли способ принудительно настроить порядок в Browserify, чтобы этот шаблонный код не требовался в каждом отдельном модуле, использующем Chaplin?


person donaddon    schedule 12.11.2015    source источник


Ответы (1)


Вы можете создать модуль, который запускает ваши шаги инициализации и экспортирует Chaplin.

// my-chaplin.js
var Backbone = require('backbone')
Backbone.$ = require('jquery')
module.exports = require('chaplin')

Всегда требуйте этот модуль вместо прямого требования chaplin:

// Each module in your app
var Chaplin = require('./my-chaplin');

CommonJS гарантирует, что эта инициализация выполняется один раз, независимо от того, сколько раз вам это нужно.

person joews    schedule 12.11.2015
comment
Да, это сработает. Вместо того, чтобы обновлять все модули и рассчитывать на то, что наши инженеры не забудут включить my-chaplin, мы решили взять этот модуль и сделать его первым в командной строке Browserify. Не уверен, что это гарантировано, но сейчас это работает. Было бы неплохо, если бы в browserify был декларативный способ управления порядком. - person donaddon; 12.11.2015
comment
Я управляю этим, заставляя браузер обрабатывать один корневой файл, для которого требуется остальная часть приложения. Там происходит любая предварительная конфигурация. Можете ли вы сделать это вместо того, чтобы передавать несколько файлов для браузера? - person joews; 12.11.2015