node.js - starte typescript tsc-kompilator fra node


Fra kommandolinjen kan jeg starte tsc-kompilatoren slik:

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

Jeg vil inkorporere dette i et Node-byggeskript.

Det finnes en TypeScript-kompilator for Node, men det virker mye mer arbeid å sette opp enn bare å kjøre kommandoen. Du må hente inn alle de riktige filene osv.

Jeg har denne koden :

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();

Men dette vil hoppe over filer som ikke er importert i RootFile.

Hvordan kan jeg enkelt kjøre tsc-programmet fra node?

Svar #1

Du kan bruke 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}`));