webpack1无法按需加载模块,就像我可以使用SystemJS
:
function a() {
var moduleName = getDynamicModuleName();
SystemJS.import(moduleName).then(function (m) {
console.log(m);
});
}
根据本文 , webpack2
似乎也可以做到这一点,因此我提出了以下内容:
function a() {
var moduleName = getDynamicModuleName();
import(moduleName).then(function (m) {
});
}
但是,webpack为moduleName
创建了捆绑包,并给出了警告:
3:4-22 Critical dependency: the request of a dependency is an expression
因此,这并不是完全动态的,而是代码拆分的工作方式。 那么webpack2是否支持像SystemJS这样的真正动态加载?
Webpack是捆绑器,不是加载器。 它提供了许多类似于loader的功能,例如require
和import
以便捆绑的模块可以相互交互,仅此而已。 您正在寻找的是实际的装载机。
一种可能性是使用webpack的script-loader
:
require(`script!${moduleUrl}`, function() { ... })
另一种可能性是独立于webpack使用实际的加载器,例如little-loader
:
var load = require("little-loader"); load("http://example.com/foo.js", function (err) { // ... your code ... });