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

Использование RequireJS вместе с файлами JavaScript без AMD

Я пытаюсь преобразовать тяжелую страницу JavaScript, чтобы использовать TypeScript, с RequireJS для управления зависимостями модуля.

Проблема заключается в том, что, так же как и взаимозависимости между файлами TypeScript, страница также зависит от некоторых общих файлов JavaScript, которые используются совместно с другими частями системы, еще не преобразованы в AMD.

Очень опасно ли размещать скрипты, отличные от AMD, в обычных тегах <SCRIPT> над тегом для Require и просто предположить, что они загружены?

Если это плохая идея, какой лучший способ справиться с этим? Нужно ли иметь версию AMD и не AMD для каждого script? Или мне нужно преобразовать все сценарии, чтобы они могли вызвать define()?

4b9b3361

Ответ 1

Последние версии RequireJS позволяют притворяться, что простые JS файлы на самом деле являются модулями AMD, которые просто ничего не возвращают.

Самая последняя версия, которую я пробовал - 2.1.4 - фактически позволяет обрабатывать простые JS файлы, такие как модули. Пример:

require(
    [
        'path/to/module' // <- AMD module
        ,'path/to/plainjs' // <- actually a plain JS file
    ]
    , function(module, plain){
        // module will be per define in that file.
        // plain will be 'undefined' type
    }
)

Вы можете просто смешать модули-подобные ссылки на простые JS файлы. Пока они загружаются в правильном порядке, они будут обновлять все глобальные переменные, которые они обновляют, и вы получаете то, что хотите. Пример:

require(['js/underscore'], function(){

    // nesting to insure Underscore, a prereq to BackBone
    // completes loading before backbone starts
    require(
        [
            'path/to/module' // <- AMD module
            ,'js/backbone' // <- actually a plain JS file
        ]
        , function(module){
            // module will be per define in that file.

            window.BackBone // is available for you

        }
    )

})

Обратите внимание, что в то время как RequireJS требует, чтобы вы добавляли ".js" в конец простых JS файлов, чтобы указать, что они простые JS, в приведенных выше примерах вы НЕ используете ".js". Это, без расширения модуль позволяет идентификатору модуля следовать алиасам paths и maps, тогда как идентификаторы с .js рассматриваются как литералы и никогда не переводятся.

Ответ 2

Вы можете вручную добавить дополнительные скрипты в теги script, но это может стать причиной того, что все вещи всегда ломаются для вашей команды (кто-то забыл добавить конкретный script).

Вы можете ссылаться на определение require.d.ts из Определенно Typed и делать прямые вызовы функции require, а не import, что может сделать вас более последовательными.