ASP. NET Core BundleMinifier удаляет асин c модификатор после минификации - PullRequest
6 голосов
/ 03 февраля 2020

Я добавил 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?

1 Ответ

2 голосов
/ 06 февраля 2020

Я воспроизвел проблему и попытался минимизировать простой js файл, который использует ES6 specifications и более поздние версии.

Test. js

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

Затем я попытался чтобы минимизировать файл с помощью инструмента Bundler и Minifier , выдается следующее сообщение об ошибке:

enter image description here

Это означает, что Bundler and Minifier не не поддерживает спецификации ES6 и более поздние версии.

Для подтверждения я начал поиск этой проблемы в Github и обнаружил такие же поведения

Я могу с уверенностью утверждать, что это Transpilers Issue

Transpilers, или source- Компиляторы "исходный код" - это инструменты, которые читают исходный код, написанный на одном языке программирования, и создают эквивалентный код на другом языке. nguage.

Наиболее распространенным и широко используемым является TypeScript

TypeScript, в некоторых случаях Transpiles ES6 и позже до ES5

Например: , если вы установите для Target значение ES6 и ES2015, оно перейдет к ES5. Однако, если вы нацелились на ES2020, НЕ транспонируете ваш код.

В конце

  • BundlerMinifier использует NUglify, который выполняет минимизацию кода javascript Так что НЕТ способа минимизировать ES6 и более поздние коды с использованием Bundler и Minifier. Если Автор не решит поддержать его.
  • Вы столкнулись с проблемой Transpile (например: ES6 - ES5).
  • Bundler & Minifier не удаляет неизвестные ключевые слова как async но выдается ошибка
...