Я работаю над довольно сложным проектом 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 определяет конкретный ли модуль загружен или нет? Я просидел в «Требовании» весь день, надеясь выяснить, где это решение сделано, безрезультатно.
Это только с сторонним модулем? Возвращает ли сторонний модуль значение? Кроме того, вы уверены, что это не ссылка в другом месте, используя другой путь? например: 'module/amp_lib'. Можете ли вы поделиться демо? –
Боюсь, я не могу поделиться демонстрацией ... однако, вот дополнительная информация: контент этого стороннего модуля имеет значение. Если я заменю содержимое на что-то вроде: '(function() {return null;}());' then Require не перезагружает модуль. Я думаю, что я буду делать это для сторонних разработчиков; они на этой неделе находятся в нашем офисе для координации этого проекта. Первоначально я думал, что это не имеет к ним никакого отношения, но теперь мне интересно, может быть, мы сможем выяснить, какая часть их (довольно большой) кодовой базы может способствовать этой проблеме. – user2407075
ОБНОВЛЕНИЕ: Сегодня я нашел проблему. Оказывается, сторонний модуль, который мы получаем, использует несколько библиотек-утилит, один из которых совместим с AMD и, следовательно, имеет свою функцию define(), когда он обнаруживает загрузчик. Поэтому при создании оптимизатор определял именно эту библиотеку как модуль, а не всю кодовую базу, что в свою очередь заставляло модуль перезагружаться во время выполнения. Извлеченный урок: будьте осторожны с заполнением сторонних материалов в проект Require. – user2407075