【问题标题】:Order of exports in webpack bundlewebpack 包中的导出顺序
【发布时间】:2018-08-23 05:09:41
【问题描述】:

对于这样的代码:

const top = document.createElement("div");
top.innerText = "This is the top";
top.style = red;

export { top };

Webpack 创建以下内容:

...

"use strict";
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, "top", function() { return top; });
...

const top = document.createElement("div");
top.innerText = "This is the top";
top.style = red;

由于在 getter 内部 function() { return top; }top 在执行脚本时尚未定义,这如何工作?

Webpack 在顶部而不是底部创建导出是否有特殊原因?

谢谢。

【问题讨论】:

    标签: javascript webpack ecmascript-6 es6-modules webpack-bundle


    【解决方案1】:

    整个 js 文件作为一个整体进行评估。 webpack 生成的代码部分正在创建一个稍后将调用的回调函数。特别是当用户代码requires 或imports 有问题的模块时。

    稍后在脚本中评估模块的内容并定义变量top,这保证在 webpack 执行之前发生function() { return top; }

    在 javascript 中使用变量之前声明或定义变量只是惯例,不是必需的。函数作用域可以安全地使用对父作用域中尚未定义的变量的引用来创建,只要它们将在函数执行时定义。

    【讨论】:

    • 您的最后一句话是正确的,当它用于不同的功能时。如果你只是尝试使用一个未定义的变量,你会得到一个错误(假设你把它当作一个 dom 节点而不是未定义的)。但是由于这个变量在一个单独的函数调用中,你可以安全地在变量之前定义函数,只要你在定义变量之前不调用那个方法。由于这整个事情是一次运行的,而且你不能将代码注入文件中间,所以你很好。我认为您对此有所回避,但我想澄清一下,因为正在提出问题。
    • 感谢@Nate 的澄清!我想你是对的。我可能不够简洁。
    猜你喜欢
    • 2017-07-01
    • 2018-10-12
    • 2018-12-19
    • 1970-01-01
    • 2017-02-19
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    相关资源
    最近更新 更多