npm ,并且正在从IntelliJ IDEA 15中正在使用
我的目标是为IntelliJ中的TypeScript源代码生成输入法,但我想学习使用Windows命令行,因此我可以明确指定命令行选项以修改每个选项的功能。我很困惑与谷歌相关的各种花絮相关的设置和使用它...我确定我遗漏了一些非常基本的东西,那些博客或回答问题的人假设为常识...
这是我尝试过的以及我所看到的......
第1步:安装打字稿:
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
:
我通过Google搜索找到的示例采用以下形式:
编译单个文件:
tsc app.ts
以上示例来自http://www.primordialcode.com/blog/post/typescript-command-line-compiler
这不会如图所示,因为:
tsc
的安装目录不在Windows Path
C:\Users\{my user id}\AppData\Roaming\npm\node_modules\typescript\bin
上,显然这可以通过更改窗口轻松解决或解决输入要执行的命令时,PATH环境变量和/或完全限定tsc
文件的路径。
更重要的是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\{my user id}\AppData\Roaming\npm\node_modules\typescript\bin\tsc
...
字面上,当指定...
脚本的完整路径时,唯一的输出是 tsc
...我猜它需要参数...但是点击了{{ 1}}键显示一个似乎是节点命令的列表(不是tab
命令)...所以我不知道这里发生了什么。 ..
现在我被困了
我需要在什么环境下安装/配置/使用来调用tsc
(如:http://www.primordialcode.com/blog/post/typescript-command-line-compiler所示)?
和/或
是否有教程或网站可以帮助我从干净的Windows系统转到能够从命令行使用TypeScript编译器为我的TypeScript源文件生成输入?
答案 0 :(得分:15)
您不应将TypeScript的bin
文件夹直接添加到Windows PATH
。如您所知,bin
文件夹中的文件无法直接从命令行执行。
相反,npm
为全局安装的软件包中的每个已配置可执行文件创建一个.cmd
脚本,并将其放入:
%APPDATA%\npm
尝试更新PATH
以包含此文件夹,重新打开命令行并尝试再次运行tsc
。
附注:默认情况下,Windows的Node.js安装程序会将Node和NPM添加到Windows路径中。如果您正常安装了Node.js,那应该可以正常工作。关于如何设置节点的任何特殊内容?
答案 1 :(得分:1)
当我在Windows 10上安装打字稿(我遵循https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html)时,我会分享一些陷阱。(我遵循https://github.com/coreybutler/nvm-windows)在安装节点较早时,请按照https://bugs.eclipse.org/bugs/show_bug.cgi?id=551105上的说明进行操作。其他方法惨遭失败。
Gotcha#1 -tsc和tsc.cmd 都在路径上(位于%NVM_SYMLINK%),但 tsc是bash脚本。换句话说,您必须使用命令 tsc.cmd 才能真正调用Windows版本!仅仅在我的Powershell终端中调用tsc会导致它陷入奇怪的错误。
Gotcha#2 -Windows文件系统锁定语义再次出现!因为一直在研究问题,所以我在编辑器中打开了tsc.cmd文件-该文件已锁定!这会导致正确的调用(tsc.cmd)也 失败。.直到我关闭编辑器。
希望这对某人有帮助。
答案 2 :(得分:0)
我遇到了同样的错误。我将完整路径添加到系统变量。我的案例的完整路径是C:\ Users \ User \ node_modules \ typescript \ bin
现在tsc会翻译我的打字稿文件。
答案 3 :(得分:0)
分析
typescript\bin\tsc
文件内容是unix脚本,但在节点下运行
#!/usr/bin/env node //<<< this loads node env
require('../lib/tsc.js') //<<< this is plain javascript
此文件加载节点并执行文件:typescript\lib\tsc.js
解决方案:
我们要重现相同的行为。
要在Windows上运行带有节点的.js文件:
node /path/to/typescript/lib/tsc.js -options -as-if-i-was-on-linux