【问题标题】:ASP.NET Core BundleMinifier removes async modifier after minificationASP.NET Core BundleMinifier 在缩小后删除异步修饰符
【发布时间】:2020-02-03 08:12:29
【问题描述】:

我将bundleconfig.json 添加到 ASP.NET Core 应用程序。它的结构如下:

[
  {
    "outputFileName": "wwwroot/js/main.min.js",
    "inputFiles": [
      "wwwroot/js/scripts/first.js",
      "wwwroot/js/scripts/second.js"
    ],
    "minify": {
      "enabled": true,
      "renameLocals": true
    },
    "sourceMap": false
  }
]

两个脚本都已被缩小并合并到main.min.js。但在缩小后,所有async 修饰符都已从结果脚本中删除。

功能如

async function foo() {
  await /* some promise */;
}

已经变成:

function foo() {await /*some promise*/;}

如何避免删除async 修饰符?

【问题讨论】:

  • 什么版本的 ASP.NET Core?
  • 我猜你遇到了this issue。您使用的是“Bundler & Minifier”VS 扩展,还是BundlerMinifier.Core NuGet 包?
  • 自 2017 年以来似乎是一个持续存在的问题......也许改变捆绑器?
  • 对不起,亲爱的兄弟,哪个工具捆绑并缩小了您的 JavaScript 代码?
  • function foo() {await /*some promise*/;} 这怎么可能?在非异步方法中使用await。使用BundleMinifier时是否遇到错误?

标签: javascript asp.net-core bundle bundling-and-minification asp.net-core-3.1


【解决方案1】:

我已经重现了这个问题,并尝试缩小一个使用 ES6 specifications 及更高版本的简单 js 文件。

Test.js

async function foo() {
    await bar();
}
async function bar() {
    for (var i = 0; i < 10; i++) { // do some work
    }
}

然后我尝试使用Bundler and Minifier 工具缩小文件然后抛出此错误:

这意味着 Bundler 和 Minifier 不支持 ES6 及更高版本的规范。

为了确认,我开始在 Github 中搜索这个问题,我发现了这些相同的行为

我可以肯定地说这是Transpilers 问题

转译器或源到源编译器是读取源代码的工具 用一种编程语言编写的代码,并产生等价的 另一种语言的代码。

最常见和使用最广泛的一种是TypeScript

TypeScript 在某些情况下会转换为 ES6 及更高版本到 ES5

例如:如果您将 Target 设置为 ES6ES2015,它将转换为 ES5。但是,如果您以ES2020 为目标,则不会转译您的代码。

在最后

  • BundlerMinifier 使用 NUglify 执行 javascript 代码 缩小所以没有办法缩小 ES6 和更高版本的代码 使用 Bundler 和 Minifier。除非,作者决定支持它。
  • 您遇到了 Transpile 问题(例如:ES6 到 ES5)。
  • Bundler & Minifier 不会删除未知关键字,例如 async,但会抛出错误

【讨论】:

    猜你喜欢
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多