Я пытаюсь внедрить модуль
оператор импорта с помощью transformer.ts
(* Я использовал ttypescript, и он работает,
Но некоторые операторы не интерпретируются.)
и мне удалось вставить оператор импорта
, но оператор импорта, который я вставил
, не был преобразован периодически в грамматику es5.
Это код, который я использовал в transfomer.
transformer.ts
let moduleName = 'infinite.js'
let variableName = ts.createUniqueName('infinite')
ctx.hoistVariableDeclaration('infinite')
// Here are just a few key codes summarised.
let importInject = ts.createImportDeclaration(
undefined,
undefined,
ts.createImportClause(variableName, undefined),
ts.createLiteral(moduleName))
sourceFile = ts.updateSourceFileNode(sourceFile, ts.createNodeArray([
importInject,
...sourceFile.statements
]))
source.js
// Nothing before it.
source.js (вставленный оператор импорта)
import infinite_1 from"infinite.js"
Внедрение кода работало нормально,
Несмотря на то, что целевой параметр компилятора определил es5,
Но у вставленного мной кода возникла проблема, которая не переводилась.
Однако, еслиЯ добавляю оператор импорта, что
не имеет никакого отношения к коду импорта модуля
Я добавлю исходный код перед внедрением модуля,
перевод вставленного мной кода также выполнен успешно.
source.js
import module from './module'
module()
source.js (вставленный оператор импорта)
"use strict";
exports.__esModule = true;
var infinite_js_1 = require("infinite.js");
var module_1 = require("./module");
module_1["default"]();
Хмм ... это проблема с опцией компиляции ...?
Если это так, какие опции компиляции следует изменить?
Я не знаю, какой код изменить ... (x_x)
У кого-нибудь когда-нибудь возникала такая проблема?
Если вы знаете решение, пожалуйста, дайте мне знать.
Кроме того, в настоящее время я использую временное решение, как показано ниже.
let importInject =
ts.createVariableStatement(
sourceFile.modifiers,
[ts.createVariableDeclaration(
variableName,
undefined, // Type
ts.createCall(
ts.createIdentifier('require'),
undefined,
[ts.createLiteral(moduleName)]
)
)]
)