#javascript #html #requirejs #shared-libraries #js-amd
Вопрос:
В моем проекте есть пользовательская сторонняя библиотека (один файл сборки), которую они создали, используя пару файлов, не относящихся к AMD и AMD. И большинство свойств доступны непосредственно для объектов окна. В нашем проекте в соответствии с новым требованием мы должны загрузить эту стороннюю библиотеку в асинхронном режиме с помощью RequireJS. Я попытался настроить оболочку, но получаю сообщение об ошибке из сторонней библиотеки, в котором говорится, что необходимы глобалы/окна, глобалы/документы.
- Как устранить вышеуказанную ошибку в текущем проекте без редактирования сторонней библиотеки? возможно ли это?
- Как использовать эти свойства сторонних библиотек в проекте, так как все свойства доступны непосредственно объекту окна.
Это ошибка, с которой мы сталкиваемся сейчас
Кто-нибудь может, пожалуйста, помочь мне с этим? заранее спасибо!
Комментарии:
1. Вы пытаетесь использовать github.com/bbc/tal/blob/master/static/script/widgets/… ? Это совместимо с AMD, но пути должны быть указаны
2. Привет @DamianDziaduch, спасибо за повтор. Этот файл мы загружаем асинхронно. Но есть одна сторонняя библиотека, которая не является файлом AMD. Эта библиотека также является консистентом других библиотек
Ответ №1:
Похоже, что ваша сторонняя библиотека video.js. Video.js было (см. Ниже) создание двух глобальных объектов global/window
, global/document
которые, по-видимому, используются для тестирования video.js на сервере, где нет окна или документа.
Вы можете увидеть их определение здесь, а затем импорт. Если вы готовы отредактировать файл (и прекратить video.js тесты на стороне рабочего сервера), то это простое решение.
Вы сказали, что не хотите редактировать библиотеку, поэтому давайте поищем другие решения. Вы могли бы просто пойти дальше и определить их следующим образом:
define('global/window', [], () => {
return window;
});
define('global/document', ['global/window'], (window) => {
return window.document;
});
Затем загрузите video.js:
require(['video.7.5.0.min.js'], (videojs) => {
window.videojs = videojs;
// any other initialization you want here
});
Также может быть полезно знать, какая версия video.js ты используешь. Похоже, это могло быть исправлено в 7.11.1 (в этом PR), так что есть большая вероятность, что простое обновление до этой версии или более поздней устранит проблему.
В этом выпуске гораздо больше обсуждается эта проблема, но, похоже, она закрыта из-за ранее упомянутого пиара.