我将 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修饰符?

最佳答案

我转载了这个问题,并尝试使用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工具缩小文件,然后抛出此错误:

javascript - ASP.NET Core BundlerMinifier缩小后删除异步修改器-LMLPHP

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

为了进行确认,我开始在Github中搜索此问题,并且发现了相同的行为
  • Crash on ES6 arrow functions in source files
  • minify es6 js file without turning them to es5
  • Where BundleMinifier currently is usefull (and where not)

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



    最常见且用途最广泛的一种是TypeScript

    在某些情况下,将TypeScript转换为ES6,然后再转换为ES5
    例如:,如果您将Target设置为ES6并将ES2015设置为Transpiles为ES5。但是,如果您定位到ES2020,则不会转换您的代码。

    在末尾
  • BundlerMinifier使用执行JavaScript代码的NUglify
    最小化因此,没有办法通过以下方式最小化ES6和更高版本的代码
    使用Bundler和Minifier。除非,否则作者决定支持它。
  • 您遇到了《发行问题》(例如:ES6至ES5)。
  • bundler 和Minifier 不会删除async等未知关键字,但会抛出错误
  • 关于javascript - ASP.NET Core BundlerMinifier缩小后删除异步修改器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60035342/

    10-13 09:22