ASP.NET 核心 BundleMinifier 在缩小后删除异步修饰符

ASP.NET Core BundleMinifier removes async modifier after minification

我将 bundleconfig.json 添加到 ASP.NET 核心应用程序。它具有以下结构:

[
  {
    "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 修饰符?

我重现了这个问题,并尝试缩小一个使用 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 问题

Transpilers, or source-to-source compilers, are tools that read source code written in one programming language, and produce the equivalent code in another language.

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

TypeScript 在某些情况下 Transpiles ES6 和后来的 ES5

例如: 如果您将目标设置为 ES6 并且将 ES2015 转换为 ES5。但是,如果您定位到 ES2020,则不会转译您的代码。

最后

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