【问题标题】:Babel output in bundle.js file not properly outputtingbundle.js 文件中的 Babel 输出未正确输出
【发布时间】:2018-08-08 09:23:43
【问题描述】:

我已经尝试了几个小时来弄清楚 Babel 发生了什么。它没有输出任何接近它应该输出的东西。

此处显示:https://babeljs.io/repl/#?babili=false&browsers=&build=&builtIns=false&code_lz=G4QwTgBAdiC2CmAhArgSwDYBN6QLwQDNkoBjAF1QHsoAKA1MAZzIDk55cAiAKUoAsonADQR0IZmwRcAIpXicAlBADeAKBLVGldPAB06SgHM6DCewgBqCJ2uXR41uwUBuVQF9XqmAhQZsYGhcgA&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&lineWrap=true&presets=es2015%2Creact%2Cstage-2&prettier=false&targets=&version=6.26.0&envVersion=

我可以提供您推断解决方案可能需要的任何上下文/文件。谢谢。

示例 script.js 函数:

var nameBuilder = function(firstName="John", lastName="Doe") {
console.log(firstName + " " + lastName);
};

nameBuilder();

Babel 输出(来自一个代码块,所以我没有缩进):

!function(e){var n={};function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l :!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),rl=!0,r.exports}tm=e,tc=n,td= function(e,n,o){to(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},tr=function(e){ Object.defineProperty(e,"__esModule",{value:!0})},tn=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e} ;return td(n,"a",n),n},to=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},tp="",t(ts=1 )}([function(e,n,t){"use strict";!function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"John",n =arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Doe";console.log(e+" "+n)}()},function(e,n,t){e.出口=t(0)}]);

【问题讨论】:

    标签: javascript npm webpack ecmascript-6 babeljs


    【解决方案1】:

    这实际上并没有错,Babel 是一个 traspiler,它使程序员能够在可能尚未实现它们的平台上使用更新的 JavaScript 功能(如您示例中的默认参数)。在这个例子中,Babel 重写了你的函数,将undefined 替换为你的默认参数,以便在尚未实现默认参数的平台上工作。

    供参考,这里是兼容性表:

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters#Browser_compatibility

    【讨论】:

    • 我想我现在的问题是为什么他们网站上的结果与我通过 webpack 运行得到的结果不同?例如,如果 script.js 函数是“const year = 2018;”它应该只是将其更改为 var,但它输出的内容与上述输出非常相似。
    • 我会检查您的配置,您上面的输出似乎已被缩小(删除了不必要的字符)。您可以设置一些标志来控制此行为。 babel 在这里做的另一件事是将其包装在 IIFE 中并将其作为模块导出(可能出于可移植性原因)
    • 我是否必须通过 .babelrc 文件访问配置?或者有没有专门的地方可以查看和操作配置?
    • 最常用的两种方法是使用 .babelrc 文件和通过 JS API(允许配置参数)
    【解决方案2】:

    看起来有一些压缩/丑化标志集,通常用于减少生产代码的大小。 检查 babel 的标志/配置/默认行为。

    【讨论】:

    • 如果我的 script.js 类似于“const year = 2018;”我应该得到接近上述显示的输出吗?这是否意味着更深层次的问题?
    • 正如 Shimsh 所说,检查您的配置。您还提到发布的输出来自 webpack,因此配置也会很有趣。总的来说,我没有看到问题,它是缩小的代码。尝试运行它。
    • 我在浏览器中运行了它,看起来事情已经检查过了。我很好奇为什么在我刚刚通过默认安装路径时它会被缩小。你会建议我如何访问配置?
    • 是的。如果源也有映射文件,那不是问题。否则,没有映射文件的压缩代码会使浏览器中的调试变得非常困难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2021-09-01
    相关资源
    最近更新 更多