我居然很难找到这个问题的答案。使用普通node .js,你可以运行任何节点路径为/to/file.js的js文件,使用CoffeeScript它是coffee hello。咖啡和ES6有babel节点hello.js。我如何用Typescript做同样的事情?

我的项目有一个tsconfig。Webpack/ts-loader使用它来为浏览器构建一个漂亮的小bundle。在此之前,我需要从控制台运行一个构建步骤,不过,这将使用项目中使用的一些.ts文件来生成模式,但我似乎无法在不编译整个项目的情况下运行单个Typescript文件。


这个问题发布于2015年。2018年,node同时识别.js和.ts。运行节点文件。t也会运行。


我们有以下步骤:

首先,您需要安装typescript NPM install -g typescript 创建一个文件helloworld.ts 函数hello(人){ 返回“Hello,”+ person; } let user = "Aamod Tiwari"; Const result = hello(用户); console.log(“结果”,结果) 打开命令提示符并键入以下命令 tsc helloworld.ts 再次运行命令 节点helloworld.js 结果将显示在控制台


如果有人像我一样疯狂,想要像运行.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。


只是一些有用的信息——这里是最新的TypeScript / JavaScript运行时Deno。

它是由节点的创造者瑞恩·达尔创造的,基于如果他可以重新开始,他会做不同的事情。


为了补充上面的@Aamod答案,如果你想使用一个命令行来编译和运行你的代码,你可以使用以下命令行:

窗口:

tsc main.ts | node main.js

Linux / macOS:

tsc main.ts && node main.js

为自己编写一个简单的bash包装器可能会有所帮助。

#!/bin/bash
npx tsc $1 && node ${1%%.ts}

运行以下命令并全局安装所需的软件包:

npm install -g ts-node typescript '@types/node'

现在运行以下命令来执行typescript文件:

ts-node typescript-file.ts

就像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代码。


全局安装ts-node节点模块。 创建节点运行时配置(IDE)或在命令行中使用node在文件js文件下运行(该路径适用于windows,但也可以适用于linux) ~ \ AppData \漫游\ npm \ node_modules \ ts-node \ dist \ bin.js 将ts文件路径作为命令行参数。 按您的喜好运行或调试。


对于像Webstorm这样的环境,node命令不能更改为ts-node或npx:

安装ts-node依赖项 需要ts-node/register src/foo。ts(在“节点参数”中添加——require ts- Node /register)


这个答案可能为时过早,但是deno支持开箱即用地运行TS和JS。

基于您的开发环境,迁移到Deno(并学习它)可能会太多,但希望这个答案在未来能帮助到某些人。


还有一个选项可以直接从CLI运行代码,而不是*。Ts文件本身。

在ts-node手册中有完美的描述。

作为第一步,通过npm、yarn或任何你喜欢的方式全局安装ts-node。 ...现在只需使用ts-node -e 'console.log("Hello, world!")'(你也可以添加-p标志来打印代码)

这个小命令是完美的检查,一切安装良好。以及查找其他与tsconfig相关的错误。json选项。


我创建了@digitak/esrun,一个精简的esbuild包装器,几乎可以立即执行TypeScript文件。制作esrun是因为我对ts-node很失望:太慢了,而且大多数时间都不能工作。

esrun相对于ts-node的优势包括:

非常快(使用esbuild), 可以导入ESM和CJS(只要使用你选择的库,esrun就可以开箱即用), 其中包含了一个监视模式,使用——watch选项运行脚本,对输入文件或其依赖项的任何更改都将重新触发结果 你可以在inspect模式下使用esrun来使用DevTools控制台而不是终端控制台。

安装完成后,只需运行:

npx @digitak/esrun file.ts

对于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的支持。


截至2022年5月,ts-node已支持es模块

npx ts-node --esm file.ts

你可能需要在package.json中添加"type": "module"。有些导入可能不可靠,除非打开experimental- specification -resolution=node

npmjs.com/package/ts-node # commonjs-vs-native-ecmascript-modules


我们也可以使用nodemon运行它

nodemon ./filepath/filename.ts

你也可以试试tsx。 tsx是一个CLI命令(node的替代品),用于无缝运行TypeScript,它基于esbuild构建,因此非常快。

https://github.com/esbuild-kit/tsx

例子:

npx tsx ./script.ts

创建TypeScript文件(例如app.ts) npm i - d typescript ts-node ->在本地安装dev依赖 NPX nodemon app.ts

使用nodemon,每次修改文件时自动重新编译app.ts


下面是命令

tsc指数。ts——outDir .temp && node .temp/index.js && rm -rf .temp <<<<<<<<< 编译 >>>>>>>>> <<<<<<< 运行 >>>>>>> << 清洁> >