tsc未被识别为内部或外部命令

117

我从VSCode 0.10.6更新到0.10.8,并尝试第一次使用TypeScript。不幸的是,当我告诉VSCode进行构建时,出现了以下错误:

tsc不是内部或外部命令,也不是可运行的程序...

以下是相关细节:

  • 我按照VS Code的说明创建了一个全新的“HelloWorld”项目。包括:
    • 我为新的package.json运行了npm init
    • 我运行了npm i --save-dev typescript因为我想要本地安装而不是全局安装。
    • 我创建了一个launch.json来定义一个node.js项目。
    • 我创建了tasks.json文件,具有tsc的预设设置。
  • 我创建了settings.json文件,如此展示。但没有帮助。
  • 我确实安装了Visual Studio 2015 Community,但没有安装任何类型的TypeScript扩展。当我在开发人员命令提示符中输入“where tsc”时,它会回复“找不到”。我认为这是一件好事。

我已经重新启动了VSCode(多次)。我错过了什么?还需要做什么?

更新

我尝试了@zlumer提供的解决方案。它成功地使TypeScript编译器运行,但然后导致数千个错误出现。为了解决这个问题,我还必须调整我的tsconfig.json以排除node_modules文件夹:

"exclude": [
    "node_modules"
]
19个回答

174

或许 Typescript 没有全局安装的原因,因此需要安装它。

npm install -g typescript // installs typescript globally
如果您想将.ts文件转换为.js,请根据您的需要执行此操作。
tsc path/file.ts // file.ts will be converted to file.js
tsc              // all .ts files will be converted to .js files with in the directory
tsc --watch      // converts all .ts files to .js, and watch changes in .ts files

注意:您可以从VSCode的终端运行此命令(查看>命令面板,然后键入Javascript Debug Terminal)。 - Alice Purcell
在我调用“tsc --watch”之前,我必须运行“tsc --init”(如果项目中缺少tsconfig.ts,则会创建它)。 - JesseBoyd
6
我已经全局安装了TypeScript,但仍然遇到错误。 - Nam Lê Quý

55
问题在于,如果本地已安装tsc,但没有添加到PATH中,就会出现问题。
你应该修改.vscode/tasks.json文件,将完整路径添加到tsc中。
需要更改的行通常等于"command": "tsc"
你应该将其更改为"command": "node",并将以下内容添加到args中:"args": ["${workspaceRoot}\\node_modules\\typescript\\bin\\tsc"](在Windows上)。
这将指示VSCode:
  1. 运行NodeJS(它应该是全局安装的)。
  2. 将本地Typescript安装作为要运行的脚本传递。
(这基本上就是tsc可执行文件所做的事情)
你确定不想全局安装Typescript吗?这应该会使事情变得更容易,特别是如果你刚开始使用它。

1
这个方法可行,但我不明白。在“本地安装TypeScript”部分的文档中,并没有提到你所提到的调整内容。其他文档则说我只需要调整settings.json文件,指向“包含TypeScript tsserver.js和相应lib.*.d.ts文件的目录”。一旦我已经调整了我的settings.json以指示正确的路径,为什么我还需要调整tasks.json中的路径呢? - Brent Arias
2
为什么我们想要全局安装TypeScript?这样做会存在一个风险,即我们的npm脚本使用错误版本的tsc进行编译。我希望它始终使用项目本地的tsc。 - pabrams
1
@pabrams 这是很久以前的好时光,当时在npm中使用本地安装的二进制文件非常困难,yarn还未发布。请记住,您正在评论一个2.5年以上的答案。 - zlumer
1
现在使用ts-nodetsc --init和VSCode中的自动构建设置,要容易10倍。 - zlumer
1
我已经全局安装了tsc,但仍然出现错误。 - Nam Lê Quý
显示剩余3条评论

50

你需要运行:

npx tsc

...而不仅仅像其他人建议的那样,将tsc像Windows命令一样调用。

如果您还没有安装npx,则应该安装。它应该是全局安装的(不像Typescript)。因此首先运行:

npm install -g npx

...然后运行npx tsc


7
从npm版本5.2开始,npx已经与npm捆绑在一起了,因此您可能无需单独安装它。 - Stephen Pham

21

适用于Windows操作系统

在全局安装TypeScript之后

npm install typescript -g 

只需搜索 "node.js 命令提示符"。

在命令提示符中输入。

tsc -v 

在这里我们可以看到 tsc 命令起作用了,现在导航到您的文件夹并键入

tsc filename.ts 

它符合将 ts 文件编译成 js 文件的要求。


3
非常好!它起作用了!尽管如此,我不明白tsc本身存在什么问题。我已经全局安装了typescript,并且它应该在VSCODE终端内工作! - Retro Code

8
在VSCode文件tasks.json中,"command": "tsc"将尝试在某些被视为模块文件夹的文件夹中查找tsc窗口命令脚本。
如果您知道npm install -g typescriptnpm install typescript命令保存的位置,建议进行替换:
"command": "tsc"

使用

"command": "D:\\Projects\\TS\\Tutorial\\node_modules\\.bin\\tsc"

其中D:\\...\\bin是包含我的tsc Windows可执行文件的文件夹。

将确定我的Vscode当前原生指向的位置,以查找并修复tsc。


5

这个错误是由于本地安装依赖引起的。

我通过以下步骤解决了这个问题:

  1. $ npm install -g typescript,然后在环境变量中设置路径:
  2. C:\Users\User\AppData\Roaming\npm
  3. tsc -v

4

tsc未被识别为内部或外部命令

如另一个答案中所述,这是因为tsc不在路径中。

1. 全局安装

为了使TypeScript编译器对该用户的所有目录都可用,请运行以下命令:

npm install -g typescript

你将看到类似以下的内容:

C:\Users\username\AppData\Roaming\npm\tsserver -> C:\Users\username\AppData\Roaming\npm\node_modules\typescript\bin\tsserver C:\Users\username\AppData\Roaming\npm\tsc -> C:\Users\username\AppData\Roaming\npm\node_modules\typescript\bin\tsc + typescript@3.6.3 added 1 package from 1 contributor in 4.769s

2. 设置环境变量

  • 将npm安装文件夹添加到您的“用户变量”和“环境变量”中。

  • 在Windows中,您可以添加环境变量PATH并将值设置为

    C:\ Users \ username \ AppData \ Roaming \ npm \

也就是说,无论npm安装文件夹在哪里,都要添加到环境变量中。

注意:如果存在多个路径,请使用;(分号)将它们分隔开。

如果下面的命令返回版本,则表示已成功安装。

tsc --version

3

您没有安装typescript,请运行以下命令,然后尝试tsc --init

npm install -g typescript

2

另一种出现此错误的情况:

安装typescript并在不使用npm run的情况下运行命令

首先,需要注意这是一个“通用”的终端错误(即使您写入 hello bla.jswowowowow index.js):

enter image description here

以下是此错误的“Hello World”示例

  1. 您可以本地安装typescript(没有-g参数)==>npm install typescripthttps://docs.npmjs.com/downloading-and-installing-packages-locally
  2. 在这种情况下,如果您在本地项目中运行npm run,则可以使用tsc命令。例如:npm run tsc -v

enter image description here

或者全局安装typescript(如其他答案所述)。


2
如果您想使用本地安装的TypeScript模块从集成终端运行tsc命令,可以将以下内容添加到您的.vscode\settings.json文件中。
{
  "terminal.integrated.env.windows": { "PATH": "${workspaceFolder}\\node_modules\\.bin;${env:PATH}" }
}

这将把本地安装的Node模块的二进制/可执行文件目录(tsc.cmd所在的位置)添加到$env.PATH变量中。

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