如何使用TypeScript制作一个shell可执行节点文件

通常在节点文件,我只是把

#!/usr/bin/env node 

在顶部,并使其可执行来创build一个可以从bashterminal运行的文件。 但是,如果我在一个Typescript文件中这样做,编译器会说“错误TS1001:意外的字符”#“”,并拒绝编译它。 那么如何使用Typescript制作一个shell可执行文件?

你是正确的向微软报告错误,他们是错误的closures它作为wontfix

直到它修复,这是一个解决方法。 将以下内容粘贴到文本文件中并保存为shebangify

 #!/usr/bin/env node var fs = require('fs'); var path = process.argv[2]; var data = "#!/usr/bin/env node\n\n"; data += fs.readFileSync(path); fs.writeFileSync(path, data); 

(为了保持这个答案的简洁,上面的代码没有任何错误检查或其他细化,所以请自担风险或使用此代码 。另外,有关预先考虑文件的更多信息,请参阅此SO问题 。

通过使用terminal导航到文件的目录并执行:

 $ chmod +x shebangify 

一旦你创build了一个你希望编译的打字机程序(例如叫做myscript.ts ),并把它变成一个shell脚本(例如称为myscript ),就可以通过在你的terminal上执行一个顺序来执行这个程序。

 $ tsc --out myscript myscript.ts ; ./shebangify myscript ; chmod +x myscript 

有关示例,请参见https://github.com/Microsoft/TypeScript/blob/master/bin/tsc 。 基本上有一个没有.js扩展名的虚拟文件,只需要实际的.js文件。

例如在名为tsc文件中:

 #!/usr/bin/env node require('./tsc.js') 

我没有足够的声望点发表评论,但是我只是觉得每个人都应该知道我在GitHub上打开了一个新的问题,因为Typescript开发者正在使用它来跟踪这样的事情: https://github.com/Microsoft/TypeScript/issues/2749