如何使用TypeScript创建shell可执行节点文件

Tom*_*thy 16 bash command-line-interface node.js typescript

通常在我刚刚放入的节点文件中

#!/usr/bin/env node 
Run Code Online (Sandbox Code Playgroud)

在顶部并使其可执行以创建可以从bash终端运行的文件.但是,如果我在Typescript文件中这样做,编译器会说"错误TS1001:意外字符"#""并拒绝编译它.那么如何使用Typescript创建一个shell可执行节点文件呢?

sam*_*per 12

您向Mac报告该错误是正确的,将它关闭为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);
Run Code Online (Sandbox Code Playgroud)

(注意:为了使这个答案简洁明了,上面的代码没有任何错误检查或其他改进,因此请自担风险或使用此代码.另外,请参阅此SO问题以获取有关前置文件的更多信息.)

通过使用终端导航到文件的目录并执行以下命令使文件可执行:

$ chmod +x shebangify
Run Code Online (Sandbox Code Playgroud)

一旦你创建了一个myscript.ts你想编译的Typescript程序(例如,被调用)并变成一个shell脚本(例如被调用myscript),可以通过在终端中沿着这些行执行一个序列来实现:

$ tsc --out myscript myscript.ts ; ./shebangify myscript ; chmod +x myscript
Run Code Online (Sandbox Code Playgroud)

  • @Jonathan 提出的问题(见 [答案](/sf/answers/2073139351/))终于解决了,今天 TypeScript 通过了 shebangs ✨ (3认同)

小智 10

如果您全局安装了 TypeScript 和 ts-node:

npm install typescript ts-node -g
Run Code Online (Sandbox Code Playgroud)

您现在可以轻松地通过以下方式执行此操作:

#!/usr/bin/env ts-node

console.log('Hello world')
Run Code Online (Sandbox Code Playgroud)


bas*_*rat 9

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

例如在文件名中tsc:

#!/usr/bin/env node
require('./tsc.js')
Run Code Online (Sandbox Code Playgroud)


小智 5

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

  • Shebang 支持已[添加](https://github.com/Microsoft/TypeScript/issues/4120) 并将在 TypeScript 1.6 中可用。同时,它可以使用 `npm install -g typescript@next` 进行测试。 (4认同)