RequireJS: несколько main.js? - PullRequest
       9

RequireJS: несколько main.js?

31 голосов
/ 10 ноября 2011

Я создавал одностраничное приложение с использованием requireJS и до сих пор люблю его.Я приступил к разработке других частей сайта за пределами основного приложения и не совсем уверен, как (или если) использовать requireJS для этого.

В моем основном приложении все запускается этим сценариемtag:

<script data-main='/scripts/main' src='/scripts/libs/require.js'>

Сейчас я разрабатываю домашнюю страницу, которая имеет свои собственные скрипты интерфейса.Использование оптимизатора для запуска сайта, который объединит все эти сценарии в один пакет main.js.Я изо всех сил пытаюсь понять, где остальная часть моего сайта вписывается в это.

Скажем, мое приложение зависит от jQuery и упаковано в оптимизированную версию приложения, что если я захочу использовать jQuery на домашней странице?Я не хочу загружать в мое приложение main.js только для того, чтобы получить доступ к моему модулю jQuery. Так что да ... немного запутался!


Я представляю себе структуру сайта примерно так:

/scripts
  - app-main.js //(includes all module dependencies after optimzation)
  - home-main.js //(includes all module dependencies after optimzation)

Приложение:

<script data-main='/scripts/app-main' src='/scripts/libs/require.js'>

Домашняя страница:

<script data-main='/scripts/home-main' src='/scripts/libs/require.js'>


Вопросы

  1. Как использовать RequireJS для разработки различных частейсайта?
  2. Рекомендуется ли иметь несколько файлов main.js?
  3. Как мои разные файлы main.js могут использовать общие модули, такие как пост-оптимизация jQuery?

Ответы [ 2 ]

38 голосов
/ 11 сентября 2012

Команда requirejs имеет несколько примеров для многостраничных приложений на github. Посмотрите на: https://github.com/requirejs/example-multipage

В основном вы будете иметь следующую структуру:

  • page1.html: страница 1 приложения.

  • page2.html: страница 2 приложения.

  • js app: каталог для хранения специфичных для приложения модулей.

  • lib: каталог для хранения сторонних модулей, таких как jQuery.

  • common.js: содержит конфигурацию requirejs, и она будет целью сборки для набора общих модулей.

  • page1.js: используется для основной базы данных для page1.html. Загружает общий модуль, затем загружает app / main1, основной модуль для страницы 1.

  • page2.js: используется для основной базы данных для page2.html. Загружает общий модуль, затем загружает app / main2, основной модуль для страницы 2.

0 голосов
/ 10 декабря 2011

Таким образом, require.js всегда должен использоваться на любой странице, чтобы обеспечить модульность и чистое пространство имен. Я считаю, что каждому «приложению» нужен собственный скрипт main.js. При оптимизации вашего сайта r.js позволяет вам исключить модули из компиляции, что вы всегда должны делать для jQuery.

Таким образом, require.js всегда будет загружать jquery.js на лету и большую часть времени из кеша. Поиск других модулей, которые могут быть кэшированы между вашим приложением и домашней страницей, должен выполняться на ваше усмотрение и зависит от потока ваших пользователей и других факторов.

Похоже, у вас есть два проекта, приложение и маркетинговый сайт. Я считаю, что они должны быть отделены друг от друга и иметь собственные папки 'js', содержащие их собственный файл main.js.

...