如何编写打字稿可执行文件?

时间:2016-05-17 09:06:45

标签: node.js typescript

使用babel-cli,您可以使用es2015语法轻松编写一些节点可执行文件。为此,您只需添加适当的shebang #!/usr/bin/env babel-node

例如,

#!/usr/bin/env babel-node

import fs from 'fs';

fs.readFileSync('./some-file.csv');

我想知道如何使用TypeScript做到这一点?

更新:尝试ts-node - 即使对于像

这样的HelloWorld示例,也会出现尴尬错误
const say = (word: string) => {
    console.log(word);
}

say('hello');

它不能通过ts-node test.ts或使用#!/usr/bin/env ts-node;

工作

在这两种情况下我都会

SyntaxError: Unexpected token :
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:373:25)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at Object.<anonymous> (/usr/local/lib/node_modules/ts-node/src/bin/ts-node.ts:110:12)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)

更新使ts-node工作。仅当文件具有.ts扩展名时才有效。对于没有扩展名但有shebang的文件 - 它不起作用。为反映所需行为的项目创建了github issue

2 个答案:

答案 0 :(得分:4)

我相信您正在寻找ts-node

#!/usr/bin/env ts-node

...rest of script

作者确认此用法在此处工作: https://github.com/TypeStrong/ts-node/issues/73

P.S。我称之为executable,而不是binary

答案 1 :(得分:1)

只是要注意,自从@ValeriiVasin 尝试的方法和@Paarth 的答案中推荐的方法以来,事情已经发生了变化。

Support for shebangs 已在 ts-node v8.9.0 中正式添加。推荐的 shebang 字符串现在包含 -script 后缀:

#!/usr/bin/env ts-node-script

使用 fs.readFileSync("somefile.json") 的脚本对我有用。