3

Я работаю над довольно сложным проектом Require; в основе этого проекта лежит база данных сторонних видеопроигрывателей, на которой мы создаем приложение. В настоящее время я разрабатываю процесс производства, используя оптимизатор Require.Требовать загрузки модуля, даже если он включен в сборку

Оптимизатор отлично работает, но когда я использую приложение со «встроенным» JS, Require настаивает на загрузке стороннего модуля, вставив дополнительный тег скрипта. Я просмотрел скомпилированный JS и подтвердил, что модуль был включен в сборку; но, похоже, он не распознается во время выполнения.

Этот модуль является то, что требуется модуль третьей стороной:

define(['models/Widget','amp_lib'], function(Widget) { 
    // Housekeeping/configuration 
    // Nothing to return here 
}) 

Модуль amp_lib определяется в основном конфигурации:

require.config({ 
    paths: { 
     amp_lib: 'path/to/module/src' 
    } 
}); 

Может кто-нибудь помочь мне понять, как Require определяет конкретный ли модуль загружен или нет? Я просидел в «Требовании» весь день, надеясь выяснить, где это решение сделано, безрезультатно.

+0

Это только с сторонним модулем? Возвращает ли сторонний модуль значение? Кроме того, вы уверены, что это не ссылка в другом месте, используя другой путь? например: 'module/amp_lib'. Можете ли вы поделиться демо? –

+0

Боюсь, я не могу поделиться демонстрацией ... однако, вот дополнительная информация: контент этого стороннего модуля имеет значение. Если я заменю содержимое на что-то вроде: '(function() {return null;}());' then Require не перезагружает модуль. Я думаю, что я буду делать это для сторонних разработчиков; они на этой неделе находятся в нашем офисе для координации этого проекта. Первоначально я думал, что это не имеет к ним никакого отношения, но теперь мне интересно, может быть, мы сможем выяснить, какая часть их (довольно большой) кодовой базы может способствовать этой проблеме. – user2407075

+0

ОБНОВЛЕНИЕ: Сегодня я нашел проблему. Оказывается, сторонний модуль, который мы получаем, использует несколько библиотек-утилит, один из которых совместим с AMD и, следовательно, имеет свою функцию define(), когда он обнаруживает загрузчик. Поэтому при создании оптимизатор определял именно эту библиотеку как модуль, а не всю кодовую базу, что в свою очередь заставляло модуль перезагружаться во время выполнения. Извлеченный урок: будьте осторожны с заполнением сторонних материалов в проект Require. – user2407075

ответ

0

Как было отмечено выше:

Я нашел эту проблему сегодня. Оказывается, сторонний модуль, который мы получаем, использует несколько библиотек-утилит, один из которых совместим с AMD и, следовательно, имеет свою функцию define(), когда он обнаруживает загрузчик. Поэтому при создании оптимизатор определял именно эту библиотеку как модуль, а не всю кодовую базу, что в свою очередь заставляло модуль перезагружаться во время выполнения. Извлеченный урок: будьте осторожны с добавлением сторонних материалов в проект Require.