Использование RequireJS с устаревшим кодом

Я работаю с очень большим проектом, в котором используются:

  1. Устаревшие страницы JSP, содержащие файлы javascript с тегами скриптов.
  2. Базовые модели и представления, использующие другие модули javascript без RequireJS.

Теперь мы хотим начать использовать RequireJS с jQuery, BackboneJS и UnderscoreJS для всего, что мы разрабатываем с этого момента, но у нас нет ресурсов, чтобы переписать все устаревшие страницы JSP. Возможно, у нас будет время переписать модели и представления Backbone, которые мы уже разработали.

Проблема в том, что для нашего устаревшего кода (как 1, так и 2 выше) мы включаем все наши файлы javascript в огромный файл и отправляем в браузеры. Этот огромный файл должен уметь сосуществовать с нашими новыми шаблонами RequireJS, но как я могу, например, разделить определенные части огромного файла, чтобы я мог использовать их с шаблонами с помощью RequireJS? Без необходимости перезаписывать все страницы, использующие эту часть файла, или иметь дублированный код.

Спасибо!


person Lars-Roland Bin Moussaka    schedule 29.01.2013    source источник
comment
связанные: stackoverflow.com/q/11632646/210696   -  person N30    schedule 18.09.2013


Ответы (2)


Я не знаю, полностью ли я понимаю проблему, но я думаю, что функции shim или map RequireJS помогут вам.

Извлеките нужные вам части в новый модуль из огромного файла javascript. Затем сообщите RequireJS, что ваш огромный файл javascript является зависимостью для этого нового модуля, используя прокладку. Что-то типа:

requirejs.config({
    shim: {
        'new-module': {
            deps: ['huge-javascript-file'],
            exports: 'NewModule'
    }
});

Документация по Shim: http://requirejs.org/docs/api.html#config-shim < / а>

Функция карты может быть полезна, когда только части вашего нового кода должны использовать ваш старый огромный файл. Ознакомьтесь с этой документацией: http://requirejs.org/docs/api.html#config-map

person Yoeran    schedule 29.01.2013

Я не думаю, что есть один верный способ добиться этого, но я подошел к аналогичной проблеме, определив «фасады» модулей вокруг кода с глобальной областью видимости. Допустим, ваши устаревшие скрипты определяют глобальную переменную с именем foo. Вы можете определить модуль AMD и экспортировать из него эту переменную:

//foo.js
define(function() {
  return window.foo;
});

//bar.js
define(['foo'], function(foo) {
  //do something with foo
});

Таким образом, вам нужно только писать однострочный фасад каждый раз, когда вам нужно использовать новую часть существующего, глобально определенного кода, без нарушения существующего кода, который ожидает, что тот же код будет глобально определен. Со временем вы можете переместить и реорганизовать реальную реализацию в модуль, не нарушая кода потребителя.

person jevakallio    schedule 29.01.2013