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

Pup*_*kin 7 javascript bundle bundling-and-minification asp.net-core asp.net-core-3.1

我添加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
  }
]
Run Code Online (Sandbox Code Playgroud)

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

功能如

async function foo() {
  await /* some promise */;
}
Run Code Online (Sandbox Code Playgroud)

已经变成:

function foo() {await /*some promise*/;}
Run Code Online (Sandbox Code Playgroud)

如何避免删除async修饰符?

Mr.*_*.AF 5

我重现了这个问题,并尝试缩小使用和稍后使用的简单js文件ES6 specifications

测试.js

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

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

在此输入图像描述

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

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

我可以肯定地说这是转译器问题

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

最常见且使用最广泛的是TypeScript

TypeScript在某些情况下会转译ES6,然后再转译ES5

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

在最后

  • BundlerMinifier 使用 NUglify 执行 javascript 代码压缩,因此无法使用 Bundler 和 Minifier 压缩 ES6 及更高版本的代码。除非,作者决定支持它。
  • 您遇到了 Transpile 问题(例如:ES6 到 ES5)。
  • Bundler & Minifier不会删除未知关键字,例如async但会引发错误