webpack 4 导出未按配置公开
webpack 4 exports are not being exposed as configured
我正在从 Webpack 3 升级到 4。
我的所有网页实际上都有 2 个入口点:一个在所有页面之间共享,另一个是页面特定的。
我以为我已经掌握了使用 webpack 4 的一切,但看起来我的一些模块执行了两次;事实证明,每个入口点都引导了一个模块,即使该模块位于共享的 js 文件中。
解决方案似乎是设置 optimization.runtimeChunk = "single"
,这将告诉 webpack 在所有块之间共享运行时。
查看 js 文件的输出,这看起来符合预期;但是,我的每个入口点都通过以下配置公开其出口:
output: {... libraryTarget: "var", libarary: ["MyLibrary", "[name]"]}
当我加载网页并尝试访问导出的 objects/functions 时,当我尝试以下操作时出现错误:
MyLibrary["entry"]
其中 "entry" 是入口点之一的名称,结果是一个数字(而不是成员是各种命名导出的预期对象)。
如果我删除 optimization.runtimeChunk = "single"
设置,那么 MyLibrary["entry"]
returns 预期的对象与我的导出,但是我有同样的问题,我的模块可能被引导多次.
我想通了。
当您指定 optimization.runtimeChunk = "single"
时,它会输出一个名为 runtime.js
的文件。该文件必须包含在网页中才能使 webpack 运行。包含该文件后,一切都按预期开始工作。
专业提示:
optimization.runtimeChunk = "single"
是以下的快捷方式:
optimization : {
runtimeChunk: {
name: 'runtime'
}
}
如果您将 "runtime" 重命名为与另一个块相同,它将包含该块中的运行时代码位。
我正在从 Webpack 3 升级到 4。
我的所有网页实际上都有 2 个入口点:一个在所有页面之间共享,另一个是页面特定的。
我以为我已经掌握了使用 webpack 4 的一切,但看起来我的一些模块执行了两次;事实证明,每个入口点都引导了一个模块,即使该模块位于共享的 js 文件中。
解决方案似乎是设置 optimization.runtimeChunk = "single"
,这将告诉 webpack 在所有块之间共享运行时。
查看 js 文件的输出,这看起来符合预期;但是,我的每个入口点都通过以下配置公开其出口:
output: {... libraryTarget: "var", libarary: ["MyLibrary", "[name]"]}
当我加载网页并尝试访问导出的 objects/functions 时,当我尝试以下操作时出现错误:
MyLibrary["entry"]
其中 "entry" 是入口点之一的名称,结果是一个数字(而不是成员是各种命名导出的预期对象)。
如果我删除 optimization.runtimeChunk = "single"
设置,那么 MyLibrary["entry"]
returns 预期的对象与我的导出,但是我有同样的问题,我的模块可能被引导多次.
我想通了。
当您指定 optimization.runtimeChunk = "single"
时,它会输出一个名为 runtime.js
的文件。该文件必须包含在网页中才能使 webpack 运行。包含该文件后,一切都按预期开始工作。
专业提示:
optimization.runtimeChunk = "single"
是以下的快捷方式:
optimization : {
runtimeChunk: {
name: 'runtime'
}
}
如果您将 "runtime" 重命名为与另一个块相同,它将包含该块中的运行时代码位。