我正在构建一个(简单的)命令行工具,它将临时打字稿文件写入磁盘,然后通过tsc /tmp/foo/bar.ts --noEmit.
我想tsc通过 STDIN将代码发送到,而不是在/tmp.
如何tsc --noEmit在发送到的代码上运行STDIN?
我按照vike 的建议尝试了ts-node。它运行良好,但和的启动成本约为 1 秒。创建所有文件并一次性编译 ( ) 它们使我只需支付一次启动费用。ts-nodetsctsc --noEmit *.ts
太棒了;
\n我想测试 437 ShExJ JSON 测试与@types/shexj. 我克隆了测试并构建了测试该类型的简单 ts 文件。
for f in *.json; do time (\n (\n echo -en "import {Schema} from \'shexj\'\\nconst x:Schema = " &&\n cat $f\n ) |\n ../node_modules/.bin/ts-node\n); done\n\nreal 0m1,336s\nuser 0m2,919s\nsys 0m0,121s\n\nreal 0m1,233s\nuser 0m2,586s\nsys 0m0,101s\n\nreal 0m1,374s\nuser 0m2,979s\nsys 0m0,127s\n\nreal 0m1,257s\nuser 0m2,692s\nsys 0m0,096s\n\xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n每个文件花费的时间 > 1.2 秒。我绕过 ts-node 直接进入 tsc:
\nfor f in *.json; do time (\n (\n echo -en "import {Schema} from \'shexj\'\\nconst x:Schema = " &&\n cat $f\n ) > ../ts/$f.ts &&\n tsc --noEmit ../ts/$f.ts\n); done\n\nreal 0m2,909s\nuser 0m7,356s\nsys 0m0,171s\n\nreal 0m2,735s\nuser 0m7,077s\nsys 0m0,182s\n\nreal 0m2,669s\nuser 0m6,822s\nsys 0m0,173s\n\nreal 0m2,670s\nuser 0m6,952s\nsys 0m0,123s\n\xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n每个文件花费 > 2.6 秒。虽然ts-node单独调用很慢,但仍然比tsc单独调用要快。(我想知道他们是如何做到这一点的。)
我一下子就把它们全部写出来了:
\ntime (\n for f in 0*.json; do (\n echo -en "import {Schema} from \'shexj\'\\nconst x:Schema = " &&\n cat $f\n ) > ../ts/$f.ts;\n done\n)\n\nreal 0m0,021s\nuser 0m0,013s\nsys 0m0,009s\nRun Code Online (Sandbox Code Playgroud)\n并立即编译它们:
\ntime tsc --noEmit ../ts/*.ts\n\nreal 0m3,198s\nuser 0m8,424s\nsys 0m0,148s\nRun Code Online (Sandbox Code Playgroud)\n据推测,这为我节省了 9.5 分钟的 CPU 占用时间。
\n