如何从命令行运行TypeScript文件?

Gun*_*ars 156 node.js typescript

我很难找到答案.使用普通的Node.JS,您可以运行任何js文件node path/to/file.js,使用CoffeeScript coffee hello.coffee和ES6 babel-node hello.js.如何使用Typescript做同样的事情?

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

bas*_*rat 216

我如何使用Typescript做同样的事情

您可以将tsc使用表模式下运行tsc -w -p .,它会产生.js在现场的时尚你的文件,这样你就可以运行node foo.js像正常

TS节点

有ts节点:https://github.com/TypeStrong/ts-node将为您完成所有这些

  • 小心使用 deno,因为它与 Node 不同,并且在 Node 中工作的代码可能无法在 deno 中工作(由于内置和 npm Nodejs 软件包) (10认同)
  • ts 节点 FTW。`npm install -g ts-node` 使 `ts-node your-script.ts` 变得轻而易举。 (9认同)
  • tsc将js写入磁盘.ts-node不需要这样做并且在运行中运行ts (8认同)
  • [`ts-node` 不支持 ES 模块](https://github.com/TypeStrong/ts-node/issues/935#issuecomment-579718641)。 (6认同)
  • 自从 [deno](https://deno.land/) 发布以来,您现在可以执行“deno run path/to/file.ts”,它将在单个命令中运行打字稿文件,而无需将其编译为单独的 JS文件。 (6认同)
  • 只是提醒 ts-node 不会从导入的模块控制台日志。例如:如果你是 ts-node fil1.ts 并且 file1.ts 在内部使用 file2.ts,那么来自 file2.ts 的控制台日志将不会被记录。 (3认同)
  • 截至 2022 年 5 月,ts-node 确实支持 es 模块 `npx ts-node --esm file.ts` https://www.npmjs.com/package/ts-node#commonjs-vs-native-ecmascript-modules (2认同)

Muh*_*zar 75

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

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

例子:

npx tsx ./script.ts
Run Code Online (Sandbox Code Playgroud)


Zee*_*mad 68

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

npm install -g ts-node typescript '@types/node'
Run Code Online (Sandbox Code Playgroud)

现在运行以下命令来执行打字稿文件:

ts-node typescript-file.ts
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,这是最好的方法,因为“ts-node”还提供了 TypeScript REPL。 (4认同)
  • 如果您不想使用全局版本,您还可以依赖“npx ts-node yourscript.ts”。 (3认同)
  • [`ts-node` 不支持 ES 模块](https://github.com/TypeStrong/ts-node/issues/935#issuecomment-579718641)。 (3认同)
  • 下载查询不再有效,请尝试 ```npm install typescript --save-dev --global && npm i ts-node -g``` (3认同)

Gin*_*een 51

我创建了@digitak/esrun ,它是esbuild的一个薄包装器,几乎可以立即执行 TypeScript 文件。esrun之所以制作是因为我对它感到失望ts-node:太慢了,而且大多数时候都不起作用。

esrun的优点包括ts-node:

  • 非常快(使用esbuild),
  • 可以导入 ESM 以及 CJS(只需使用您选择的库即可esrun开箱即用),
  • 有一个包含的监视模式,使用该选项运行脚本--watch,对条目文件或其任何依赖项的任何更改都将重新触发结果
  • 您可以esrun在检查模式下使用 DevTools 控制台而不是终端控制台。

安装后,只需运行:

npx @digitak/esrun file.ts
Run Code Online (Sandbox Code Playgroud)

  • @RobinMétral 是的,我有时觉得免责声明很荒谬。我发这篇文章并不是为了自己的宣传,而是为了真正帮助那些和我有同样需求的人。`ts-node` 很麻烦而且很慢,我想要一个现代的打字稿运行器。我还认为这并不是我真正的工作,因为我只是围绕 Evan W 的出色 EsBuild 库编写了一个小包装 - 他是值得所有荣誉的人。 (12认同)
  • 天哪,这正是我多年来一直在寻找的东西!无法使“ts-node”工作。只需运行“esrun my-file.ts”,即可开箱即用! (7认同)
  • 也许需要一点免责声明,表明您是该库的作者? (6认同)
  • 我不确定为什么没有指定这一点,但要(轻松)使用它,请在需要时用“npx @digitak/esrun index.ts”替换“index.ts”。 (4认同)
  • 哦,感谢链接@RobinMétral,不知道它是强制性的。我会更新我的答案。这个库只不过是 Esbuild 的 77 行代码包装器,不需要 7 名协作者团队或 77 行代码的扩展测试套件。所有工作均由 Esbuild 完成。人们可以使用它或 ts-node 或 sucrase-node 或任何他们喜欢的东西。我个人更喜欢我的图书馆,因为我遇到的问题较少。Estrella 看起来很棒,但我不会推荐它来解决这个问题(也不推荐 Esbuild),因为它们都是构建工具而不是运行工具。 (3认同)
  • @GinQuin 我只是想对构建这个表示感谢。我还发现 ts-node 不能很好地处理导入/导出的脚本。你帮我解决了很多头痛问题。令人疯狂的是,TypeScript 的工具中还没有内置此功能,所以感谢您填补了空白。 (2认同)

小智 28

我们有以下步骤

  1. 首先,您需要安装打字稿

    npm install -g typescript

2.创建一个文件helloword.ts

function hello(person){
 return "Hello, " + person;
}
let user = "Aamod Tiwari";
const result = hello(user);
console.log("Result",result)
Run Code Online (Sandbox Code Playgroud)

3.打开命令提示符并键入以下命令

tsc helloward.ts

  1. 再次运行命令

node helloward.js

  1. 结果将显示在控制台上

  • 在您的情况下,我们运行 .js 文件而不是 .ts 文件。 (12认同)

ton*_*nes 17

要添加到上面的@Aamod答案中,如果要使用一个命令行来编译和运行代码,则可以使用以下命令:

视窗:

tsc main.ts | node main.js
Run Code Online (Sandbox Code Playgroud)

Linux / macOS:

tsc main.ts && node main.js
Run Code Online (Sandbox Code Playgroud)

  • `npm install typescript -g` 安装 `tsc` CLI (3认同)
  • 啊窗户‘管道’ (3认同)

Dan*_*scu 15

其他答案都没有讨论如何运行使用模块的 TypeScript 脚本,尤其是现代 ES 模块。

首先,截至 2020 年 3 月,ts-node在这种情况下不起作用。所以我们将满足tsc于node.

其次,TypeScript 还是不能输出.mjs文件。因此,我们会满足于.js文件和"type": "module"在package.json。

第三,您需要干净的import线条,而不指定.js扩展名(这会在.ts文件中造成混淆):

import { Lib } from './Lib';
Run Code Online (Sandbox Code Playgroud)

嗯,这很重要。除非您使用该标志,否则Node需要在导入时指定扩展名experimental-specifier-resolution=node。在这种情况下,它会使 Node 查找Lib.js或Lib/index.js当您只指定时./Lib就import行了。

第四,还有一个问题:如果您的main文件名与index.js包中的文件名不同,Node 将找不到它。

与运行普通 Node.js 相比,转译使事情变得更加混乱。

这是一个具有现代 TypeScript 项目结构的示例存储库,生成 ES 模块代码。

  • 您可以使用 https://www.npmjs.com/package/@digitak/esrun 来解决提到的问题 (3认同)
  • 添加 --esm 并不能解决导入所需的文件扩展名问题。 (2认同)

Ale*_*nov 13

只是有用的信息 - 这是最新的 TypeScript / JavaScript 运行时Deno。

它是由节点 Ryan Dahl 的创建者创建的,基于如果他可以重新开始,他会做些什么不同的事情。

  • 这是一个示例:`deno run https://deno.land/std/examples/welcome.ts` (4认同)

rob*_*obd 12

对于 linux / mac,您可以添加ts-node-scriptshebang。

全局安装 typescript / ts-node (非全局安装参见下面1 ):

npm install ts-node typescript --save-dev --global
Run Code Online (Sandbox Code Playgroud)

将其添加为文件中的第一行.ts:

#!/usr/bin/env ts-node-script
Run Code Online (Sandbox Code Playgroud)

然后使文件可执行:

$ chmod +x ./your-file.ts
Run Code Online (Sandbox Code Playgroud)

然后您可以直接从命令行运行该文件:

$ ./your-file.ts
Run Code Online (Sandbox Code Playgroud)

笔记:

1对于非全局安装,您可以在项目本地安装

npm install ts-node typescript --save-dev
Run Code Online (Sandbox Code Playgroud)

并将相对路径添加到 shebang 脚本,例如:

#!/usr/bin/env ./node_modules/.bin/ts-node-script
Run Code Online (Sandbox Code Playgroud)

2 ts-node v8.9.0中正式添加了对 shebangs 的支持。


bcb*_*ian 12

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

npx ts-node --esm file.ts
Run Code Online (Sandbox Code Playgroud)

您可能需要添加"type": "module",到您的package.json. 除非您打开,否则某些导入可能会很不稳定experimental-specifier-resolution=node

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


Xua*_*uan 10

使用发髻。

它速度更快,并且捆绑了很多工具。

bun run ./my-script.ts

  • 这真的很容易! (2认同)

小智 6

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

#!/bin/bash
npx tsc $1 && node ${1%%.ts}
Run Code Online (Sandbox Code Playgroud)


Dan*_*l T 6

对于Webstorm等环境,node命令不能更改为ts-node或npx:

  1. npm install ts-node typescript(安装依赖项)
  2. node --require ts-node/register src/foo.ts(添加--require ts-node/register到“节点参数”)


小智 6

这是命令

tsc index.ts --outDir .temp && node .temp/index.js && rm -rf .temp
<<<<<<<<< Compile >>>>>>>>> <<<<<<< Run >>>>>>> << Clean >>


Kar*_*iem 5

就像Zeeshan Ahmad 的回答一样,我也认为ts-node是要走的路。我还会添加一个shebang并使其可执行,因此您可以直接运行它。

  1. 全局安装 typescript 和 ts-node:

    npm install -g ts-node typescript
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    yarn global add ts-node typescript
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建一个hello包含以下内容的文件:

    npm install -g ts-node typescript
    
    Run Code Online (Sandbox Code Playgroud)

    如您所见,第一行有 ts-node 的shebang

  3. 直接执行文件就可以运行

    $ ./hello
    Result: Hello, root
    
    Run Code Online (Sandbox Code Playgroud)

一些注意事项:


2020 年 4 月 6 日更新:在评论中大量输入后的一些更改:更新 shebang 以使用ts-node-script而不是ts-node,链接到 ts-node 中的问题。

  • [`ts-node` 不支持 ES 模块](https://github.com/TypeStrong/ts-node/issues/935#issuecomment-579718641)。 (2认同)