有没有办法使用Node在内存中转换TypeScript?我希望能够在内存中获得生成的JavaScript。
答案 0 :(得分:8)
是的,您可以使用TypeScript-Simple:
https://github.com/teppeis/typescript-simple
var tss = require('typescript-simple');
var js = tss('var n: number = 1;');
console.log(js); // 'var n = 1;'
答案 1 :(得分:3)
我们最终基于原生的TypeScript transpileModule 功能开发了我们自己的解决方案。
来自TYPESCRIPT DOCS
TranspileModule将从'输入'编译源文本。使用指定编译器选项的参数如果没有提供选项 - 它将使用一组默认编译器选项。此函数将无条件使用的额外编译器选项包括:
transpile() - 此代码会将TypeScript转换为JavaScript(需要TypeScript中的typescriptServices.min.js):
export function transpile(tscode: string): TYPE.EVENT {
interface TranspileOptions {
compilerOptions?: any
fileName?: string;
reportDiagnostics?: boolean;
moduleName?: string;
renamedDependencies?: any;
}
interface TranspileOutput {
outputText: string;
diagnostics?: any[];
sourceMapText?: string;
}
let compilerOptions: ts.CompilerOptions = {
isolatedModules: false
}
let options: TranspileOptions = {
compilerOptions: compilerOptions,
reportDiagnostics: true
// moduleName: modulename
}
let info: TYPE.EVENT;
try {
// Transpile the ts code to js.
let ret: TranspileOutput = ts.transpileModule(tscode, options);
// If diagnostics were returned.
// NOTE: The transpiler is currently always return a message (code=5047) about 'isolatedModules', which
// is not relavent for our use. If there is more than one row than there is in fact an error.
if (ret.diagnostics && ret.diagnostics.length > 0) {
let code = ret.diagnostics[0].code;
if (code == 5047) {
return (info = {
success: true,
returnvalue: ret.outputText,
caller: LibCore.getFunctionName(arguments)
})
} else {
let text = ret.diagnostics[0].messageText;
// let hint = ret.diagnostics[0].file.parseDiagnostics[0].file.nextContainer.symbol.name;
return (info = {
success: false,
returnvalue: ret.diagnostics,
message: `Syntax error: ${text} Code: ${code}`,
caller: LibCore.getFunctionName(arguments)
})
}
} else {
return (info = {
success: true,
returnvalue: ret.outputText,
caller: LibCore.getFunctionName(arguments)
})
}
} catch (e) {
return (info = {
success: false,
message: e.message,
caller: LibCore.getFunctionName(arguments)
})
}
}