从Windows命令行

时间:2016-04-20 19:53:23

标签: node.js windows typescript

已安装

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

这不会如图所示,因为:

  1. tsc的安装目录不在Windows Path C:\Users\{my user id}\AppData\Roaming\npm\node_modules\typescript\bin上,显然这可以通过更改窗口轻松解决或解决输入要执行的命令时,PATH环境变量和/或完全限定tsc文件的路径。

  2. 更重要的是tsc文件不是Windows可执行文件... #! Unix脚本(shebang)是一个死的赠品。

  3. 检查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源文件生成输入?

4 个答案:

答案 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文件:

  1. 打开CMD或PowerShell
  2. 类型:node /path/to/typescript/lib/tsc.js -options -as-if-i-was-on-linux
  3. 按Enter