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 中搜索这个问题,我发现了这些相同的行为
- 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
在某些情况下 Transpiles ES6
和后来的 ES5
例如: 如果您将目标设置为 ES6
并且将 ES2015
转换为 ES5
。但是,如果您定位到 ES2020
,则不会转译您的代码。
最后
- BundlerMinifier 使用 NUglify 执行 javascript 代码
缩小 所以没有办法缩小 ES6 和更高版本的代码
使用 Bundler 和 Minifier。除非,作者决定支持。
- 您遇到了 Transpile 问题(例如:ES6 到 ES5)。
- Bundler & Minifier 不会删除
async
等未知关键字但抛出错误
我将 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 中搜索这个问题,我发现了这些相同的行为
- 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
在某些情况下 Transpiles ES6
和后来的 ES5
例如: 如果您将目标设置为 ES6
并且将 ES2015
转换为 ES5
。但是,如果您定位到 ES2020
,则不会转译您的代码。
最后
- BundlerMinifier 使用 NUglify 执行 javascript 代码 缩小 所以没有办法缩小 ES6 和更高版本的代码 使用 Bundler 和 Minifier。除非,作者决定支持。
- 您遇到了 Transpile 问题(例如:ES6 到 ES5)。
- Bundler & Minifier 不会删除
async
等未知关键字但抛出错误