【问题标题】:Webpack output change v4 to v5Webpack 输出将 v4 更改为 v5
【发布时间】:2020-12-31 19:55:17
【问题描述】:

我正在将一个使用 webpack 的项目从 v4 升级到 v5,虽然现在所有编译都没有错误(经过一些最小的调整),但我注意到输出格式完全不同。在 v4 下,它的外部结构如下:

(function(modules) {
...
});

而现在在 v5 中它具有如下结构:

(() => {
...
})();

认为这会导致我们项目中使用输出的特定方式出现问题(具体来说,后者似乎被调用,但前者似乎没有被调用)。

是否有更改 v5 中默认输出的设置?

我尝试查看 output.iife(无效)和文档中的其他内容,但没有看到适合我的内容。我确定我遗漏了一些明显的东西。

更新:

有了@felixmosh 的回答,我成功了。使用函数语法而不是 lambda 语法现在是一致的,但仍然存在一个问题,即 v5 变体似乎是自执行的,而 v4 不是。

我在 GitHub 上添加了一个基于 webpack 入门示例的 repro over: https://github.com/tlmii/webpack-v4-to-v5-example

【问题讨论】:

    标签: webpack webpack-4 webpack-5


    【解决方案1】:

    你可以指定webpack的targetes

    module.exports = {
      // ...
      target: ['web', 'es5']
    };
    

    【讨论】:

    • 谢谢@felixmosh - 这似乎让我走到了一半。它现在使用函数语法而不是 lambda。但它似乎仍在执行(它包括最终的 (),这在 v4 中不存在,就像 lambda 变体所做的那样)。
    • 我更新了我的问题,并添加了一个指向表现这种行为的存储库的链接(只是 v4 入门指南,在迁移到 v5 之前和之后稍作调整)。
    • 为什么自我调用对你来说是个问题?
    • 使用这些包的方式,每个包的“函数”在执行之前被传递给一个编排器(把它想象成在包的输出前面加上const myFunc = ,然后传递@ 987654326@ 到另一个函数)。但看起来,由于 v5 被执行,它返回 undefined 并且编排器检测到并抛出错误。我只是假设有一些方法可以保持 v4 样式的输出。
    • 什么orchestrator?
    猜你喜欢
    • 1970-01-01
    • 2022-08-16
    • 2022-11-17
    • 2022-01-16
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    相关资源
    最近更新 更多