#!/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);
(N.B.为了保持答案简洁,上面的代码没有任何错误检查或其他改进,所以使用风险自担,或者使用this代替。另外,请参阅this SO question以获得更多关于在文件前面添加前缀的信息。) 通过使用终端导航到文件目录并执行以下命令,使文件可执行:
8条答案
按热度按时间ckx4rj1h1#
基本上有一个没有
.js
扩展名的虚拟文件,只需要实际的.js
文件。例如,在名为
tsc
的文件中:k10s72fa2#
你向微软报告这个bug是正确的,他们把它作为 wontfix 关闭是错误的。
在它 * 被 * 修复之前,这里有一个变通方法。将以下内容粘贴到一个文本文件中,并将其保存为
shebangify
:(N.B.为了保持答案简洁,上面的代码没有任何错误检查或其他改进,所以使用风险自担,或者使用this代替。另外,请参阅this SO question以获得更多关于在文件前面添加前缀的信息。)
通过使用终端导航到文件目录并执行以下命令,使文件可执行:
一旦你创建了一个Typescript程序(例如,名为
myscript.ts
),你希望编译并转换成shell脚本(例如,名为myscript
),通过沿着你的终端中执行一个序列来完成:nwwlzxa73#
如果全局安装了TypeScript和ts节点:
现在,您可以使用以下工具轻松完成此操作:
iezvtpos4#
我没有足够的信誉点数来发表评论,但我只是想让大家知道我在GitHub上开了一个新的问题,因为这是Typescript开发人员用来跟踪类似以下内容的东西:https://github.com/Microsoft/TypeScript/issues/2749.
hfsqlsce5#
如果有人还在为让它工作而挣扎,ts文件应该以
#! node
而不是#!/usr/bin/env node
开头,tsc将负责其余的工作。tktrz96b6#
我从来没有能够让
ts-node
工作,所以我终于找到了自己的方法用TypeScript编写shell脚本。如果有一个包管理器的Bash我会做一个包,但没有,所以我只是把这个脚本作为ts-exec
放在我的路径中:现在我可以做这样的事情:
而且很管用。
当然,它也有一些局限性
...所以基本上它是为bash书呆子谁想要使用TypeScript的小脚本,这将是一个痛苦的写为bash脚本。我仍然感到困惑的是,
ts-node
没有涵盖这种情况,我宁愿没有futz与临时文件,可能会留下浪费空间,如果有一个错误,但到目前为止,这涵盖了我的用例。(此外,我有一个cronjob,它每天晚上都会删除~/tmp
中超过31622400秒的所有内容,所以临时文件不会吃掉我的整个系统。)lvmkulzt7#
从ts-node v8.9.0开始,建议使用以下方法来执行此操作:
8zzbczxx8#
如果您不想全局安装TS和ts-node,而想直接通过文件路径运行脚本,请在local node_modules旁边创建一个文件(例如
cli.ts
),并将其作为第一行然后通过调用
./cli.ts
执行