Загрузчик Webpack, эквивалентный загрузке плагина requirejs с XMLHttpRequest

У меня есть пара плагинов requirejs, которые я хотел бы заменить на загрузчик веб-пакетов.

define('firstLoader', {
  load: function (name, parentRequire, onload, config) {
    var xhr = new XMLHttpRequest();

    xhr.addEventListener('load', function () {onload(this.responseText);});
    xhr.addEventListener('error', onload.error);
    xhr.addEventListener('abort', onload.error);

    var url = '...' + name;
    xhr.open('GET', url);
    xhr.send()
  }
})

define('jsonLoader', {
  load: function (name, parentRequire, onload, config) {
    //This is the nasty part.
    req(['firstLoader!' + name], function (text) {
      try {
        onload(JSON.parse(text));
      }
      catch (err) {
        onload.error(err);
      }
    })
  }
});

Самыми большими проблемами являются отсутствие обещаний на асинхронный запрос и динамическое требование. Есть ли способ обойти это без транспиляции (с помощью `System.load) или дополнительных библиотек (bluebird и т. Д.)?

редактировать

Итак, я решил воспользоваться этим, и теперь я получаю сообщение об ошибке

Module not found: Error: Can't resolve 'future/url'

когда я иду в require('jsonLoader!future/url'). Разрешает ли веб-пакет загрузчикам работать во время выполнения? Вот обновленный код.

firstPlugin.js

module.exports = function loadAsync (content, callback) {
      var host = document.location.host
      var url = host + '...' + name
      xhr.addEventListener("load", function () {callback(null, this.responseText)})
      xhr.open("GET", url)
      xhr.send()
    }
}

jsonPlugin.js

module.exports = function (content, callback) {
  require('firstPlugin!' + content, function (result) {
      callback(null, JSON.parse(result))
  })
}

1 ответ

Решение

Require и Webpack - это просто принципиально разные шаблоны. Они оба относятся к "модулям" и "загрузке", но в остальном...

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

Другие вопросы по тегам