WebPack-Requirejs Interop Hacking:尚未在上下文错误中加载模块,但同级却具有



我在一个系统中遇到问题,在该系统中,我们可以自由地混合和匹配WebPack和requirejs。我们有一个静态代码基库创建了类型的Web UI,但是在此Web UI中可以从其他地方请求。

静态Web UI部分是使用WebPack构建的。但是,使用requienjs自然要求动态零件。现在这很简单,但是问题是其中一些动态部分希望将其引用回静态部分。这通常会导致重复,因为requirejs获取并重新初始化代码,而无视该代码已经存在于WebPack创建的捆绑包中的事实。

为了解决这个问题,我想出了一个( Ingenious (怪异的hack,在静态代码开始时,我们导入了通过requienjs and window.define("static/code/location", () => import "static/code/location")需要我们知道的静态部分实际代码当然无法使用(。

因此,我们从本质上获取WebPack模块参考,并将其定义为此模块提供特定命名模块的requirej。这实际上奏效了,我很高兴。

但是出现了一个奇怪的问题。其中一项动态必需的代码在其中具有requierjs的const a = require("some/path/a");语法,由于某种原因,该特定的" some/path/path/a"错误使用 module has not been loaded yet for context: _. Use require([])。即使在要求行之前,我(通过开发人员控制台(执行define("path/to/a", () => {})也会发生这种情况。此外,执行const b = require("some/path/b");确实有效,返回了适当的模块,尽管模块相同的路径,但这些模块中的两个最初都被定义为我上面描述的Freaky Hack解决方案中的Requirejs。/p>

关于正在发生的事情的任何线索,为什么定义的一个兄弟姐妹之一,而另一个兄弟姐妹不能定义,这将是最大的。尽管这绝对不是一个特别的"好"用例...对此很抱歉。

我找到了一种解决情况的方法。我仍然不知道是什么原因导致了错误,但是解决此问题的方法是将path/to/a定义为普通对象,而不是返回普通对象的无参数函数。

window.define("path/to/a", import("a"))(再次释义。(

最新更新