使用XMLHttpRequest加载requirejs插件的Webpack加载器

我有一对requirejs插件,我想用webpack加载器替换。

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)或其他库(蓝鸟等)?

编辑

所以我对此采取了一些措施,现在我得到一个错误

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

当我去require('jsonLoader!future/url' )。 webpack允许装载机在运行时运行吗? 这是更新的代码。

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))
  })
}

Require和Webpack只是根本不同的模式。 他们都涉及'模块'和'加载',但否则...

一般来说,Webpack纯粹是一个编译/构建时间工具。 所以,不,它的装载机不能在运行时运行。 但是,Webpack可以在构建时创建多个包,您可以在运行时单独调用/下载。 根据您想要如何调用这些额外的捆绑包(来自模块内部或来自特定'页面'),您感兴趣的Webpack概念是代码拆分和入口点。

链接地址: http://www.djcxy.com/p/32767.html

上一篇: Webpack loader equivalent of requirejs plugin load with XMLHttpRequest

下一篇: Avoid app throttling when Electron is in background