Лучшее решение для переноса Typescript в ES6 без переноса Async? - PullRequest
1 голос
/ 18 октября 2019

извините, название может вас смущать, позвольте мне объяснить это:

наша среда 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(); });
}

, но, к сожалению, наш env не поддерживает собственный генератор ... а также мы не можем перенести TS вES5, поскольку некоторые из библиотек, на которые ссылается proj, являются модулями ES6, поэтому, если вы переносите TS в ES5, класс не может быть унаследован (ES5 использует __extends для этого)

, поэтому я нахожурешение для переноса наших кодов TS в ES6, но со всеми async в нем в стиле ES5 (tslib.js)

Я могу принять любые решения, npm / node / post scripts / TS, что угодно,что мне нужно, это ключи! спасибо, ребята.

1 Ответ

1 голос
/ 22 октября 2019

Спасибо @ ecraig12345 за советы.

На самом деле для этого вам нужно использовать плагин Babel для повторной передачи JS, сгенерированного из источника TS.

Шаги:

1, обычно компилируйте и выводите файлы JS из вашего проекта TS.

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, а затемпросто выполните задачу deployFinal в меню «Терминал»> «Выполнить задачи», и задача сначала скомпилирует TS, а затем шаг за шагом запустит Babel, чтобы шаг за шагом перенести async синтаксис в выходную папку.

Получайте удовольствие.

...