在Windows命令行中运行tsc

13

npm已安装并且正在从IntelliJ IDEA 15中积极使用。

我的目标是在IntelliJ中为我的TypeScript源代码生成类型定义文件,但我想要学习使用Windows命令行,以便可以显式指定tinker的命令行选项,以理解每个选项的作用。 我通过谷歌搜索找到了与此设置和使用相关的各种细节...我相信我错过了一些非常基本的东西,那些博客或回答问题的人都假定为常识...

下面是我尝试过的和我看到的内容...

步骤1:安装TypeScript:

npm install -g typescript

这会导致以下文件/目录结构安装在我的系统上:

C:\Users\{my user id}\AppData\Roaming\npm\node_modules\typescript
|---bin
|   |--- tsc
|   |--- tscserver
|---lib
|   |--- lib.core.d.ts
|   |--- ...
|   |--- typescriptServices.js
|--- .npmignore
|--- ...
|--- ThirdPartyNoticeText.txt

步骤2:尝试从Windows命令行直接运行tsc

我通过谷歌搜索找到的示例形式如下:

编译单个文件:

tsc app.ts

上述示例来自于http://www.primordialcode.com/blog/post/typescript-command-line-compiler

因为以下原因,此方法无法正常工作:

  1. tsc的安装目录不在Windows路径 C:\Users\{my user id}\AppData\Roaming\npm\node_modules\typescript\bin 上,显然可以通过更改Window PATH环境变量和/或完整限定执行命令时tsc文件的路径来解决此问题。

  2. 更为重要的是,tsc文件不是Windows可执行文件... #! Unix脚本(shebang)是一个明显的线索。

检查tsc文件:

#!/usr/bin/env node
require('../lib/tsc.js')

步骤 3:尝试从节点命令提示符中运行tsc

C:\>node

> tsc

ReferenceError: tsc is not defined
at repl:1:1
at REPLServer.defaultEval (repl.js:252:27)
at bound (domain.js:287:14)
at REPLServer.runBound [as eval] (domain.js:300:12)
at REPLServer.<anonymous> (repl.js:417:12)
at emitOne (events.js:82:20)
at REPLServer.emit (events.js:169:7)
at REPLServer.Interface._onLine (readline.js:210:10)
at REPLServer.Interface._line (readline.js:549:8)
at REPLServer.Interface._ttyWrite (readline.js:826:14)

^C

好的...让我们指定 tsc 脚本的完整路径:

C:\>node

> C:\Users\{我的用户ID}\AppData\Roaming\npm\node_modules\typescript\bin\tsc

...

当指定完整路径到tsc脚本时,字面上唯一的输出是...。我猜它需要参数...但按tab键会显示一个node命令列表(而不是tsc命令)...所以我不知道发生了什么......

现在我卡住了。

我需要安装 / 配置 / 使用哪个环境来调用tsc(如: http://www.primordialcode.com/blog/post/typescript-command-line-compiler)?

和/或者

是否有教程或网站可以帮助我从干净的Windows系统开始,并能够使用TypeScript编译器从命令行生成我的TypeScript源文件的类型定义?

4个回答

32

您不应直接将TypeScript的bin文件夹添加到Windows的PATH中。 正如您所注意到的,该bin文件夹中的文件不能直接从命令行执行。

相反,npm为全局安装的每个配置的可执行包创建一个.cmd脚本,并将其放在:

%APPDATA%\npm

尝试更新你的 PATH,将这个文件夹添加进去,重新打开命令行并再次尝试运行 tsc

顺便提一下:Windows 上的 Node.js 安装程序默认会将 Node 和 NPM 添加到 Windows 路径中。如果你已经正常安装了 Node.js,那么应该没有问题。你有没有对你的 Node 进行特殊设置?


2
由于某些原因,我不得不将%APPDATA%\npm的扩展版本添加到我的路径中,以使其开始工作...非常感谢您的帮助...现在我可以回去工作了...谢谢! :) - Neoheurist

3
我会分享一些当我在Windows 10上安装typescript时遇到的坑(我遵循了https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html)。之前,我按照https://github.com/coreybutler/nvm-windows的说明设置了node,但是使用其他方法后,我遭遇了惨败。 坑 #1 - tsc和tsc.cmd都在路径(位于%NVM_SYMLINK%),但是tsc是bash脚本。换句话说,在实际调用Windows版本之前,您必须使用命令tsc.cmd 。只是调用tsc将在我的Powershell终端中导致它崩溃,并出现奇怪的错误。 要点2 - Windows文件系统锁定语义再次出现了!因为我一直在研究这个问题,所以我在编辑器中打开了tsc.cmd文件 - 这会锁定该文件!这会导致正确的调用(tsc.cmd)失败... 直到我关闭编辑器。

希望这能帮助到某些人..


0

我曾经遇到同样的错误。 我将完整路径添加到系统变量中。 在我的情况下,完整路径是C:\ Users \ User \ node_modules \ typescript \ bin

现在tsc可以编译我的TypeScript文件。


0

通用解决方案:

分析

typescript\bin\tsc文件内容是一个UNIX脚本,但它在node下运行。

#!/usr/bin/env node //<<< this loads node env
require('../lib/tsc.js') //<<< this is plain javascript

这个文件加载了node,并执行文件:typescript\lib\tsc.js

解决方案:

我们想要复制相同的行为。
在Windows上使用node运行.js文件:

  1. 打开CMD或PowerShell
  2. 输入:node /path/to/typescript/lib/tsc.js -options -as-if-i-was-on-linux
  3. 按回车键

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接