Использование тегов сценариев работает отлично, вплоть до точки. Когда вы добавляете новые интерфейсные библиотеки и новый код приложения, управление зависимостями между ними становится очень сложным. Когда вы используете только теги скриптов, да, вам просто нужно поставить их в правильном порядке, и он просто сработает ». Это нормально, если у вас всего несколько сценариев, но получение этого права по мере роста вашего проекта является более сложным, чем вы думаете (я говорю это по опыту).
Как вы отметили, использование модулей CommonJS исправляет это. Зависимости четко обозначаются синтаксисом require
и экспортируются с module.exports
, и вы можете забыть об управлении зависимостями и позволить загрузчику сценариев сделать это. Сначала это может показаться накладными, но это позволит вашему проекту масштабироваться. Первоначальная стоимость получения модульной системы, настроенной для вашего JS-кода, будет стоить того, что стоит в будущем.
Использование модульной системы, такой как CommonJS, также способствует хорошему инкапсуляции, что поможет вам написать более многократно используемые компоненты кода, которые легче поддерживать.
Другая по-настоящему важная причина, по которой вы хотите использовать модульную систему для вашего JS-кода, заключается в том, что вы можете объединить все свои скрипты вместе. Используя такой инструмент, как браузер, вы можете просматривать все ваши сценарии и объединять их в один JS-файл, что означает 1 HTTP-запрос вместо отдельного HTTP-запроса для каждого тега скрипта. Это почти всегда означает, что ваша страница будет загружаться быстрее, особенно на мобильных устройствах, где задержка для каждого HTTP-запроса действительно высока.
Одно предостережение в том, что может хорошая идея, чтобы включить действительно популярные библиотеки (например, JQuery) на странице с тегом скрипта (используя копию CDN), если вы думаете, это может быть кэшируются браузером пользователя.
Привет, Райан, спасибо за хорошее объяснение различий в использовании тега script и commonjs. Но это не совсем то, что я задал, поэтому мой вопрос заключается в том, почему мне нужно настроить Backbone. $ Явно в commonjs, а не на то, что он позаботится о себе при использовании в теге скрипта. –
Извините, что не ответил на ваш реальный вопрос. Это связано с тем, что когда вы загружаете jQuery через тег script, он устанавливает глобальную переменную 'window. $' Как объект jQuery. Библиотеки, зависящие от jQuery, такие как Backbone и Underscore, ожидают найти эту глобальную переменную. Одно из огромных преимуществ CommonJS заключается в том, что вы не смешиваете глобальное пространство имен с переменными. Единственный способ получить объект jQuery - это вызов 'require ('jquery')'; переменная 'window. $' не определена. Таким образом, строка 'Backbone. $ = $;' Сообщает Backbone, как получить jQuery, не требуя его захвата из объекта 'window'. –