我很难找到答案。使用普通的 Node.JS,您可以使用 node path/to/file.js
运行任何 js 文件,使用 CoffeeScript 它是 coffee hello.coffee
而 ES6 有 babel-node hello.js
。我如何对 Typescript 做同样的事情?
我的项目有一个 tsconfig.json
,Webpack/ts-loader 使用它来为浏览器构建一个漂亮的小包。不过,在此之前我需要从控制台运行构建步骤,这将使用项目中使用的一些 .ts
文件来生成模式,但我似乎无法运行单个 Typescript文件而不编译整个项目。
我如何对 Typescript 做同样的事情
您可以使用 tsc -w -p .
让 tsc
在监视模式下运行,它会以实时方式为您生成 .js
文件,因此您可以像平常一样运行 node foo.js
TS 节点
有 ts-node : https://github.com/TypeStrong/ts-node 可以即时编译代码并通过节点运行它🌹
npx ts-node src/foo.ts
运行以下命令并全局安装所需的软件包:
npm install -g ts-node typescript '@types/node'
现在运行以下命令来执行一个打字稿文件:
ts-node typescript-file.ts
ts-node
还提供 TypeScript REPL。
npx ts-node yourscript.ts
。
npm install typescript --save-dev --global && npm i ts-node -g
'@types/node'
,我建议查看以下链接:npmjs.com/package/@types/node、alura.com.br/artigos/… [🇧🇷]、blog.angular-university.io/…。 😊
我们有以下步骤:
首先你需要安装 typescript npm install -g typescript 创建一个文件 helloworld.ts function hello(person){ return "Hello, " + person; } 让用户=“Aamod Tiwari”;常量结果 = 你好(用户); console.log("Result", result) 打开命令提示符并输入以下命令 tsc helloworld.ts 再次运行命令 node helloworld.js 结果将显示在控制台上
要添加到上面的@Aamod 答案,如果您想使用一个命令行来编译和运行您的代码,您可以使用以下命令:
视窗:
tsc main.ts | node main.js
Linux / macOS:
tsc main.ts && node main.js
npm install typescript -g
安装 tsc
CLI
编辑:2022 年 5 月
ts-node
现在有一个 --esm
标志使用它。
老答案:
其他答案都没有讨论如何运行使用模块的 TypeScript 脚本,尤其是现代 ES 模块。
首先,在这种情况下,截至 2020 年 3 月,ts-node doesn't work。因此,我们将满足于 tsc
,然后是 node
。
第二,TypeScript still can't output .mjs
files。因此,我们将解决 .js
个文件和 package.json
中的 "type": "module"
个。
第三,您需要干净的 import
行,而不指定 .js
扩展名(这会在 .ts
文件中造成混淆):
import { Lib } from './Lib';
嗯,这不是微不足道的。节点需要在导入时指定扩展,除非您使用 experimental-specifier-resolution=node
标志。在这种情况下,当您仅在 import
行上指定 ./Lib
时,它将使 Node 能够查找 Lib.js
或 Lib/index.js
。
第四,还有一个障碍:if you have a different main
filename than index.js
in your package, Node won't find it。
转译比运行普通 Node 更麻烦。
这里是 a sample repo with a modern TypeScript project structure,生成 ES 模块代码。
--esm
标志。你的回答是我的最爱!您能否更新以帮助未来的开发人员:)
您可以使用 @digitak/esrun 库,它是对 esbuild 的薄包装,几乎可以立即执行打字稿文件。
我是图书馆的作者。
我创建它是因为我对 ts-node
感到失望:太慢了,而且它在大多数情况下都不起作用。
esrun 相对于 ts-node
的优势:
非常快(使用 esbuild),
可以导入 ESM 以及 CJS(只需使用您选择的库,它就可以开箱即用),
有一个包含的监视模式,使用“--watch”选项运行您的脚本,对您的条目文件或其任何依赖项的任何更改都将重新触发结果,
您可以在检查模式下使用它来使用 DevTools 控制台而不是终端控制台。
ts-node
工作。只需运行“esrun my-file.ts”,开箱即用!
ts-node
是麻烦和缓慢,我想要一个现代的打字稿运行器。我也认为这不是我的工作,因为我只为 Evan W 的令人敬畏的 EsBuild 库编写了一个小包装 - 他是值得所有功劳的人。
npx @digitak/esrun index.ts
替换 index.ts
。
只是有用的信息 - 这是最新的 TypeScript/JavaScript 运行时Deno。
它是由节点 Ryan Dahl 的创建者创建的,基于如果他可以重新开始,他会做些什么不同的事情。
deno run https://deno.land/std/examples/welcome.ts
Deno is secure by default. Therefore, unless you specifically enable it, a deno module has no file, network, or environment access for example.
在开发时添加额外的标志。然后将其锁定:deno run --unstable --allow-read --allow-env main.ts
-> dev.to/mxfellner/…
与 Zeeshan Ahmad's answer 一样,我也认为 ts-node
是要走的路。我还会添加一个 shebang 并使其可执行,因此您可以直接运行它。
全局安装 typescript 和 ts-node: npm install -g ts-node typescript 或 yarn global add ts-node typescript 使用以下内容创建文件 hello:#!/usr/bin/env ts-node-script import * as os from 'os' function hello(name: string) { return 'Hello, ' + name } const user = os.userInfo().username console.log(`Result: ${hello(user)}`) 如您所见,第一行有 ts-node 的 shebang 通过执行文件直接运行 $ ./hello 结果:你好,root
一些注意事项:
正如 Dan Dascalescu 所指出的,这似乎不适用于 ES 模块。
请参阅此问题,讨论 Kaspar Etter 提供的使用包链接制作命令行脚本的最佳方法。我已经相应地改进了shebang
2020-04-06 更新:在评论中大量输入后进行了一些更改:更新 shebang 以使用 ts-node-script
而不是 ts-node
,链接到 ts-node 中的问题。
#!/usr/bin/env ts-node-script
(也是 ts-node
的一部分)似乎更适合此目的。如果您想链接您的脚本(例如使用 npm link
),事情会变得更加复杂,因为 ts-node
的脚本模式(还没有?)遵循符号链接。在我的情况下,我最终选择了 #!/usr/bin/env -S ts-node --project /usr/local/lib/node_modules/<your-project>/tsconfig.json
。
对于 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
笔记:
1 对于非全局安装,您可以将本地安装到您的项目
npm install ts-node typescript --save-dev
并将相对路径添加到 shebang 脚本,例如:
#!/usr/bin/env ./node_modules/.bin/ts-node-script
2 Support for shebangs 在 ts-node v8.9.0 中正式添加。
给自己写一个简单的 bash 包装器可能会有所帮助。
#!/bin/bash
npx tsc $1 && node ${1%%.ts}
截至 2022 年 5 月,ts-node
确实支持 es 模块
npx ts-node --esm file.ts
您可能需要将 "type": "module",
添加到您的 package.json
。除非您打开 experimental-specifier-resolution=node
,否则某些导入可能会出现问题
npmjs.com/package/ts-node#commonjs-vs-native-ecmascript-modules
对于无法将 node
命令更改为 ts-node
或 npx
的环境,例如 Webstorm:
npm install ts-node typescript (安装依赖项) node --require ts-node/register src/foo.ts (添加 --require ts-node/register 到“节点参数”)
这个答案可能为时过早,但 deno 支持开箱即用地运行 TS 和 JS。
根据您的开发环境,迁移到 Deno(并了解它)可能太多了,但希望这个答案对未来的人有所帮助。
以防万一有人像我一样疯了,只想像运行 .js 脚本一样运行 typescript 脚本,你可以试试这个。我编写了一个 hacky 脚本,似乎使用节点执行 .ts 脚本。
#!/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 文件,然后使用节点运行它,如下所示:
# tsrun myscript.ts
简单的。只要确保你的脚本只有一个“。”否则,您需要以不同于我所展示的方式更改您的 JSFILE。
全局安装 ts-node 节点模块。创建节点运行时配置(用于 IDE)或在命令行中使用 node 在文件 js 文件下运行(路径适用于 windows,但您也可以为 linux 执行此操作)~\AppData\Roaming\npm\node_modules\ts-node \dist\bin.js 将您的 ts 文件路径作为命令行参数。随心所欲地运行或调试。
在我的 mac m1 中,我不得不逃避 .(句号)
ts-node index\ ts
当然还有npm i -g typescript ts-node @types/node
还有一个选项可以直接从 CLI 运行代码,而不是 *.ts
文件本身。
完美地描述了in the ts-node manual。
第一步,通过 npm、yarn 或任何你喜欢的方式全局安装 ts-node。 ...现在只需使用 ts-node -e 'console.log("Hello, world!")' (您还可以添加 -p 标志以打印代码)
这个小命令非常适合检查,是否一切安装正常。并用于查找与 tsconfig.json
选项相关的其他错误。
这个问题是在 2015 年发布的。在 2018 年,node 可以识别 .js 和 .ts。因此,运行 node file.ts
也会运行。
npm install -g ts-node
让ts-node your-script.ts
变得轻而易举。deno run path/to/file.ts
,它将在单个命令中运行 typescript 文件,而无需将其编译为单独的 JS 文件。