webpack2可以像SystemJS一样动态加载模块吗

Can webpack2 load modules dynamically like SystemJS

webpack1 没有按需加载模块的能力,就像我可以用 SystemJS:

function a() {
    var moduleName = getDynamicModuleName();
    SystemJS.import(moduleName).then(function (m) {
        console.log(m);
    });
}

基于 on this article 似乎 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-like 功能,如 requireimport 以便捆绑的模块可以相互交互,但仅此而已。您正在寻找的是一个真正的装载机。

一种可能是使用 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 ... });