在不转换异步的情况下将 Typescript 转换为 ES6 的最佳解决方案?
Best solution for transpiling Typescript into ES6 without transpiling of Async?
对不起,标题可能让您感到困惑,让我解释一下:
我们的JS环境有点特殊,完全支持ES6,没有原生生成器function*
和yield
,所以Typescript代码:
async test(): Promise {
return await Promise.resolve();
}
将被转译为 ES6:
function test() {
return __awaiter(this, void 0, void 0, function* () { return yield Promise.resolve(); });
}
但是,讽刺的是……我们的环境不支持原生生成器……
而且,我们也无法将 TS 转译为 ES5,因为项目引用的一些库是 ES6 模块,因此如果将 TS 转译为 ES5,则无法继承 class(ES5 使用 __extends 这样做)
所以我正在寻找一个将我们的 TS 代码转换成 ES6 的解决方案,但其中的所有 async
都被转换成 ES5 风格 (tslib.js
)
我可以接受任何解决方案,npm / node / post scripts / TS 功能,我需要的是线索!谢谢大家。
感谢@ecraig12345 的提示。
其实要实现这个,还得用Babel
插件再转译TS源生成的JS。
步骤:
1、从你的TS项目中正常编译输出JS文件
2、使用npm
安装Babel及相关插件:
@babel/cli
@babel/core
@babel/runtime
@babel/plugin-transform-for-of
@babel/plugin-transform-regenerator
@babel/plugin-transform-runtime
3,编辑您的 .babelrc
文件并使用以下内容:
{
"plugins": [
"@babel/plugin-transform-for-of",
"@babel/plugin-transform-regenerator",
"@babel/plugin-transform-runtime"
]
}
4、编辑你的tasks.json
你的TS项目:
{
....
"tasks": [
{
"label": "deployTs",
"group": "build",
"type": "shell",
"command": "tsc TS_OUTPUT_JS_FOLDER/ --module commonjs --target es6"
},
{
"label": "deployFinal",
"group": "build",
"type": "shell",
"command": "npx babel TS_OUTPUT_JS_FOLDER/ -d RE_TRANSPILE_OUTPUT_FOLDER/",
"dependsOn": ["depolyTs"],
"dependsOrder": "sequence"
},
....
]
....
}
5,然后通过菜单Terminal > 运行 Tasks执行deployFinal
任务,任务会先编译TS再运行Babel转译async
逐步输出文件夹中的语法。
玩得开心。
对不起,标题可能让您感到困惑,让我解释一下:
我们的JS环境有点特殊,完全支持ES6,没有原生生成器function*
和yield
,所以Typescript代码:
async test(): Promise {
return await Promise.resolve();
}
将被转译为 ES6:
function test() {
return __awaiter(this, void 0, void 0, function* () { return yield Promise.resolve(); });
}
但是,讽刺的是……我们的环境不支持原生生成器…… 而且,我们也无法将 TS 转译为 ES5,因为项目引用的一些库是 ES6 模块,因此如果将 TS 转译为 ES5,则无法继承 class(ES5 使用 __extends 这样做)
所以我正在寻找一个将我们的 TS 代码转换成 ES6 的解决方案,但其中的所有 async
都被转换成 ES5 风格 (tslib.js
)
我可以接受任何解决方案,npm / node / post scripts / TS 功能,我需要的是线索!谢谢大家。
感谢@ecraig12345 的提示。
其实要实现这个,还得用Babel
插件再转译TS源生成的JS。
步骤:
1、从你的TS项目中正常编译输出JS文件
2、使用npm
安装Babel及相关插件:
@babel/cli
@babel/core
@babel/runtime
@babel/plugin-transform-for-of
@babel/plugin-transform-regenerator
@babel/plugin-transform-runtime
3,编辑您的 .babelrc
文件并使用以下内容:
{
"plugins": [
"@babel/plugin-transform-for-of",
"@babel/plugin-transform-regenerator",
"@babel/plugin-transform-runtime"
]
}
4、编辑你的tasks.json
你的TS项目:
{
....
"tasks": [
{
"label": "deployTs",
"group": "build",
"type": "shell",
"command": "tsc TS_OUTPUT_JS_FOLDER/ --module commonjs --target es6"
},
{
"label": "deployFinal",
"group": "build",
"type": "shell",
"command": "npx babel TS_OUTPUT_JS_FOLDER/ -d RE_TRANSPILE_OUTPUT_FOLDER/",
"dependsOn": ["depolyTs"],
"dependsOrder": "sequence"
},
....
]
....
}
5,然后通过菜单Terminal > 运行 Tasks执行deployFinal
任务,任务会先编译TS再运行Babel转译async
逐步输出文件夹中的语法。
玩得开心。