如何配置 webpack 的自动代码拆分以加载相对于构建输出文件夹的模块?



我正在使用 Webpack 2 的自动代码拆分将我的应用程序划分为多个输出文件。我的webpack.config.js文件是:

const path = require('path');
module.exports = {
  entry: './app.js',
  output: {
    filename: '[name].js',
    path: path.join(__dirname, 'build'),
  }
}

这会正确地将我的app.js文件与其他模块文件一起构建到 build 文件夹中。构建目录包含以下文件:

main.js
0.js

我的问题是,当main.js请求0.js时,它会在我的应用程序的根目录下这样做,而不是相对于其当前位置。所以它基本上是在应该加载localhost:8000/0.js的时候加载localhost:8000/build/0.js。如何配置我的项目,以便我的项目相对于我的主入口点的路径正确加载拆分模块?

默认情况下,

Webpack 将从根目录加载模块。您可以通过在入口点中声明 __webpack_public_path__ 变量来配置 Webpack 将从哪个文件夹加载。因此,对于此方案,您可以使用:

__webpack_public_path__ = 'build/';

然后 Webpack 将从 build 文件夹中加载模块。但是,这仍然是相对于根的。为了告诉 Webpack 相对于入口点加载脚本,您可以通过以下方式动态配置__webpack_public_path__到入口点脚本的目录:

const scriptURL = document.currentScript.src;
__webpack_public_path__ = scriptURL.slice(0, scriptURL.lastIndexOf('/') + 1);

document.currentScript在常青浏览器中得到了很好的支持,但在Internet Explorer中不受支持。

最新更新