从节点启动打字稿tsc编译器

时间:2018-07-01 13:51:05

标签: node.js typescript

我可以从命令行启动tsc编译器,如下所示:

../../node_modules/.bin/tsc

我想将其合并到节点构建脚本中。

有一个供节点使用的Typescript编译器,但设置工作似乎更多,而不仅仅是炮轰。您必须提取所有正确的文件等。

我有此代码:

fs.emptyDirSync(paths.appBuild);

const json = ts.parseConfigFileTextToJson(tsconfig, ts.sys.readFile(tsconfig), true);

const { options } = ts.parseJsonConfigFileContent(json.config, ts.sys, path.dirname(tsconfig));

options.configFilePath = paths.tsConfig;

options.outDir = outDir;
options.src = src;
options.noEmitOnError = true;
options.pretty = true;
options.sourceMap = process.argv.includes('--source-map');

let rootFile = path.join(process.cwd(), 'src/index.tsx');

if (!fs.existsSync(rootFile)) {
   rootFile = path.join(process.cwd(), 'src/index.ts');
}

const host = ts.createCompilerHost(options, true);
const prog = ts.createProgram([rootFile], options, host);
const result = prog.emit();

但这将丢失未导入RootFile中的文件。

如何简单地从节点中插入tsc exe文件?

1 个答案:

答案 0 :(得分:2)

您可以使用child_process.exec

const path = require('path');
const { exec } = require('child_process');

const tscPath = path.join(__dirname, '../../node_modules/.bin/tsc');
const tsc = exec(`${tscPath} ${process.argv.slice(2).join(' ')}`);

tsc.stdout.on('data', data => console.log(data));
tsc.stderr.on('data', data => console.error(data));

tsc.on('close', code => console.log(`tsc exited with code ${code}`));