我正在尝试注入一个模块
transformer.ts导入语句
(*我用了打字本,效果很好,
但有些陈述没有得到解释。)
我成功地插入了import语句
但是我注射的进口声明
没有间歇地转换为es5语法。
这是我在转染中使用的代码。
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)]
)
)]
)发布于 2018-12-31 05:45:46
以下代码被发送到es5的原因.
import module from './module'
module()...but这段代码不..。
import module from './module'...is,因为在发出时,编译器将删除在表达式中不使用标识符的任何导入声明(尝试使用tsc的代码,您就会看到这种行为)。
溶液
解决方案是在表达式中使用导入的标识符之一,或者注入只导入模块的导入声明,以避免副作用:
// import "./module";
let importInject = ts.createImportDeclaration(
undefined,
undefined,
undefined,
ts.createLiteral(moduleName));https://stackoverflow.com/questions/53946438
复制相似问题