Есть ли способ перевести TypeScript в память с помощью узла? Я хотел бы иметь возможность получить сгенерированный JavaScript в памяти.Transpile 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;'
Мы закончили разработку нашего собственного решения, основанного на родном машинопись transpileModule функциональность.
ИЗ машинопись DOCS
TranspileModule будет компилировать исходный текст из «входного» аргумента, используя указанные параметры компилятора. Если параметры не заданы - он будет использовать набор параметров компилятора по умолчанию. Дополнительные опции компилятора, которые будут безоговорочно использоваться этой функцией, являются:
- isolatedModules = истинные
- allowNonTsExtensions = истинный
- noLib = истинный
- noResolve = истинный
transpile() - Этот код преобразует TypeScript в JavaScript (typescriptServices.min.js от TypeScript не требуется):
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)
})
}
}
Прохладный. Вы знаете, как получить определения '.d.ts' от API? –
Вы можете загрузить компилятор в узел, который делает такие модули, как gulp-typescript. Не уверен, что они полностью работают в памяти. – ssube
Предполагая, что «в памяти» вы просто означаете «не записано в файл», тогда да, вы можете использовать gulp-tsc для компиляции TypeScript, а затем проложить его в любом месте. Я уверен, что есть много примеров этого онлайн, но если бы вы предложили пример - вот один из моих gulpfiles, который использует gulp-tsc: https://github.com/bvaughn/task-runner/blob/master /gulpfile.js#L97 – brianvaughn