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

标签 javascript asp.net-core bundle bundling-and-minification 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
  }
]

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

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

已经变成:
function foo() {await /*some promise*/;}

如何避免删除 async修饰符?

最佳答案

我已经重现了这个问题并试图缩小一个使用 ES6 specifications 的简单 js 文件。然后。

测试.js

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

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

enter image description here

这意味着 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问题

    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在某些情况下转译 ES6后来到ES5
    例如:如果您将目标设置为 ES6ES2015它转译为 ES5 .但是,如果您的目标是 ES2020不会转译您的代码。

    在最后
  • BundlerMinifier 使用 NUglify 执行 javascript 代码
    缩小所以没有办法缩小 ES6 和更高版本的代码
    使用 Bundler 和 Minifier。除非,作者决定支持它。
  • 您遇到了 Transpile 问题(例如:ES6 到 ES5)。
  • 打包器和压缩器 不会删除未知关键字,如 async但抛出错误
  • 关于javascript - ASP.NET Core BundleMinifier 在缩小后删除异步修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60035342/

    相关文章:

    javascript - setTimeout 是 javascript window 对象的一部分吗?

    c# - 如何从 ASP.NET Core 2.1 API 获取 401 Unauthorized 的详细信息

    .net - ASP.NET Core Identity 更改登录 URL

    asp.net-core - .Net Core 将表单数据发送到 uri

    javascript - bundle 单个文件

    javascript - 如何将表单中的 Json 发布到 Controller 然后保存到数据库

    javascript - 联系表格和 PHP

    javascript - 如何将 momentjs 添加到缩小的 bundle 文件中?

    ios - xcassets 中的所有图像,然后如何加载从我的包中的 Nib 引用的图像

    javascript - Bluebird promise 本质上是阻塞的吗