我居然很难找到这个问题的答案。使用普通node .js,你可以运行任何节点路径为/to/file.js的js文件,使用CoffeeScript它是coffee hello。咖啡和ES6有babel节点hello.js。我如何用Typescript做同样的事情?
我的项目有一个tsconfig。Webpack/ts-loader使用它来为浏览器构建一个漂亮的小bundle。在此之前,我需要从控制台运行一个构建步骤,不过,这将使用项目中使用的一些.ts文件来生成模式,但我似乎无法在不编译整个项目的情况下运行单个Typescript文件。
如果有人像我一样疯狂,想要像运行.js脚本一样运行typescript脚本,你可以试试这个。我编写了一个使用node执行.ts脚本的hack脚本。
#!/usr/bin/env bash
NODEPATH="$HOME/.nvm/versions/node/v8.11.3/bin" # set path to your node/tsc
export TSC="$NODEPATH/tsc"
export NODE="$NODEPATH/node"
TSCFILE=$1 # only parameter is the name of the ts file you created.
function show_usage() {
echo "ts2node [ts file]"
exit 0
}
if [ "$TSCFILE" == "" ]
then
show_usage;
fi
JSFILE="$(echo $TSCFILE|cut -d"." -f 1).js"
$TSC $TSCFILE && $NODE $JSFILE
你可以这样做,也可以自己写,但本质上,它创建了.js文件,然后使用node运行它,如下所示:
# tsrun myscript.ts
简单。只要确保您的脚本只有一个“。”,否则您将需要以不同于我所展示的方式更改JSFILE。
就像Zeeshan Ahmad的回答一样,我也认为ts节点是可行的。我还会添加一个shebang并使其可执行,因此您可以直接运行它。
全局安装typescript和ts-node:
NPM install -g ts-node typescript
或
Yarn全局添加ts-node typescript
创建一个文件hello,内容如下:
#!/usr/bin/env ts-node-script
从' OS '导入*为OS
函数hello(name: string) {
返回'Hello, ' + name
}
const user = os.userInfo().username
console.log('结果:${你好(用户)}')
如您所见,第一行有ts节点的shebang
通过执行文件直接运行
美元。/你好
结果:Hello, root
一些注意事项:
正如Dan Dascalescu所指出的,这似乎不适用于ES模块。
请参阅本文讨论使用包链接创建命令行脚本的最佳方法,由Kaspar Etter提供。我已经相应地改进了shebang
更新2020-04-06:在评论中大量输入后进行了一些更改:更新shebang使用ts-node-script而不是ts-node,链接到ts-node中的问题。
编辑:2022年5月
Ts-node现在有一个——esm标志。
旧的回答:
其他答案都没有讨论如何运行使用模块的TypeScript脚本,特别是现代ES模块。
首先,截至2020年3月,ts-node在这种情况下无法工作。所以我们把tsc和node放在一起。
其次,TypeScript仍然不能输出.mjs文件。因此,我们将满足于.js文件和package.json中的"type": "module"。
第三,你想要干净的导入行,而不指定.js扩展名(这在.ts文件中会令人困惑):
import { Lib } from './Lib';
这是很重要的。Node需要在导入时指定扩展,除非使用experimental- specification -resolution= Node标志。在这种情况下,当你只在导入行上指定./Lib时,它将使Node能够查找Lib.js或Lib/index.js。
第四,还有一个问题:如果包中的主文件名与index.js不同,Node将找不到它。
编译比运行普通Node要麻烦得多。
下面是一个带有现代TypeScript项目结构的示例repo,生成ES Module代码。
对于linux / mac,您可以添加ts-node-script shebang。
全局安装typescript / ts-node(非全局安装参见下面1):
npm install ts-node typescript --save-dev --global
在.ts文件中添加第一行:
#!/usr/bin/env ts-node-script
然后使文件可执行:
$ chmod +x ./your-file.ts
然后你可以直接从命令行运行文件:
$ ./your-file.ts
注:
对于非全局安装,您可以在项目中进行本地安装
npm install ts-node typescript --save-dev
并添加相对路径到shebang脚本,例如:
#!/usr/bin/env ./node_modules/.bin/ts-node-script
2在ts-node v8.9.0中正式增加了对shebangs的支持。