javascript - plugin - webpack doc_page src app page body body share_this_document
Cargador webpack equivalente a requirejs plugin load con XMLHttpRequest (1)
Require y Webpack son solo patrones fundamentalmente diferentes. Ambos se relacionan con ''módulos'' y ''carga'', pero de lo contrario ...
En general, Webpack es puramente una herramienta de compilación / tiempo de compilación. Entonces, no, sus cargadores no pueden operar en tiempo de ejecución. Sin embargo, Webpack puede crear múltiples paquetes en tiempo de compilación, que puede llamar / descargar por separado en tiempo de ejecución. Dependiendo de cómo quiera llamar a esos paquetes adicionales (desde dentro de un módulo, o desde una ''página'' particular) los conceptos de Webpack en los que está interesado son la división de código y los puntos de entrada múltiples .
Tengo un par de plugins requirejs, que me gustaría reemplazar con un cargador de 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);
}
})
}
});
Los mayores problemas son la falta de promesas para la solicitud asincrónica y la demanda dinámica. ¿Hay alguna forma de evitar esto sin transpilation (con `System.load) o bibliotecas adicionales (bluebird, etc.)?
Editar
Así que he tomado una grieta en esto, y ahora estoy recibiendo un error
Module not found: Error: Can''t resolve ''future/url''
cuando voy a require(''jsonLoader!future/url''
). ¿El paquete web permite que los cargadores funcionen en tiempo de ejecución? Aquí está el código actualizado.
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))
})
}