如何在 webpack 联合上下文中向块请求添加参数?

How can I add parameter to chunk requests in the context of webpack federation?

我正在基于 webpack federation 在 Liferay Portal 之上构建模块加载架构。

由于门户网站有登录用户的概念,并且每个用户都有一个首选语言环境,我需要请求 JavaScript 个文件,其中包含一个名为 languageId 的额外参数,该参数等同于语言环境代码(对于例如:en_US)。这是因为服务器端过滤器根据该参数处理 .js 文件。

查看 webpack 生成的代码,我只能想到两个可以完成此操作的地方:

但是,似乎无法配置这两个文件让我将该参数添加到请求中。

另外,我想不出我可以在运行时做任何调整来转换 URL(考虑回调或类似的东西)。

如果有的话,最好的实现方式是什么?

没办法的话,是不是webpack应该有的功能?

提前致谢。

所以,this GitHub issue中给出了解决方案。基本上,我需要做的就是:

  1. 创建一个与联邦库同名的标准webpack入口点。像这样:

module.exports = {
    entry: {
      "xyz": ["./initialization-logic"]
    },

    plugins: [
      new ModuleFederationPlugin({
        name: "xyz",
        // ...
      })
    ]
    
    ...
}

  1. 在该入口点添加此代码:

const original = __webpack_get_script_filename__;
    
__webpack_get_script_filename__ = (chunkId) => {
  const filename = original(chunkId);
  return `${filename}?languageId=${lang}`
}

这样,由于 1,代码在浏览器加载库 .js 文件后立即执行。由于 2,标准 __webpack_get_script_filename__ 函数被新函数修补,将 languageId 参数添加到请求中。