Скрипты предстоит работать в неизвестной среде, где может быть уже загружен Vue и какие-то другие библиотеки, а может быть и нет.
Для этого создал такой вот скелет инициализации:
init: function (conteinerId,tags) {
tags = tags || [];
this._checkDependencies().then(() => {
console.log('Go')
});
},
_checkDependencies: function () {
var promise = new Promise(function(resolve, reject) {resolve(true);});
if (typeof Vue == 'undefined')
promise = promise.then(script => this._loadScript('//cdn.jsdelivr.net/npm/vue@2/dist/vue.js'));
if (typeof axios == 'undefined')
promise = promise.then(script => this._loadScript("//unpkg.com/axios/dist/axios.min.js"))
promise = promise.then(script => this._loadScript("//unpkg.com/vue-axios@2.1.5/dist/vue-axios.min.js"))
return promise;
},
_loadScript: function (src) {
return new Promise(function(resolve, reject) {
let script = document.createElement('script');
script.src = src;
script.type = 'text/javascript';
script.onload = () => resolve(script);
script.onerror = () => reject(new Error(`Ошибка загрузки скрипта ${src}`));
document.head.append(script);
});
}
И все хорошо, если не загружен еще на страницу vue-axios, но если он есть - вылетает ошибка Uncaught TypeError: Cannot redefine property: axios из-за того что я загружаю его повторно. Как проверить что vue-axios уже загружен? Или что он хотя бы зарегистрирован во Vue?
Пытался смотреть код плагина, но он мне не очень понятен - я не вижу чтобы он создавал какие-то глобальные переменные на наличие которых можно ориентироваться.