“ npx tsc --version”报告虚拟机内部的不同TypeScript版本

时间:2019-03-13 09:16:21

标签: node.js typescript npm tsc npx

我希望能够在主机+来宾操作系统上的项目上运行npx tsc。但是来宾使用的是tsc的其他(较旧)版本-我不确定它的来源。

我的设置:

  • 主机操作系统:Windows 10
  • 来宾操作系统:Debian 9
  • 我正在使用VirtualBox,来宾正在使用VirtualBox的“共享文件夹”功能挂载主机的文件-因此它没有项目文件的单独副本-我的项目始终可通过共享文件夹访问。
  • 我在主机或来宾操作系统上均未全局安装Typescript(npm -g)(要确认这一点,在主机和来宾上均运行npm -g ls typescript时显示为“空”,而单独运行“ tsc”则不会不能正常工作。

我有一个带有TypeScript 3.3.3333的项目,并已安装到带有NPM的项目中。

在Windows主机操作系统上,当我cd进入项目文件夹并运行时:

  • npm ls typescript我看到输出:typescript@3.3.3333(按预期)
  • npx tsc --version我看到输出:Version 3.3.3333(按预期)

在Linux客户操作系统中,当我cd进入项目文件夹并运行时:

  • npm ls typescript我看到输出:typescript@3.3.3333(按预期)
  • npx tsc --version我看到输出:message TS6029: Version 1.5.3意外!

因此,由于它不支持某些较新的tsconfig设置,因此无法运行npx tsc在来宾内部编译代码。

此tsc 1.5.3版本从何而来,我如何摆脱它?

或者我可以在主机上运行一些替代的NPM命令,以将可用的tsc安装到适用于Windows + Linux的项目中吗?

此外,我项目的根目录 以上 都没有一个父文件夹(但是,我项目的根目录确实具有其node_modules子文件夹)。

1 个答案:

答案 0 :(得分:2)

为简短起见,TypeScript二进制文件称为tsc。如果未全局安装,则npx无法知道tsc是指tsc软件包的typescript二进制文件。 npx tsc是指deprecated tsc package

解决此问题的一种方法是显式指定软件包名称:

npx -p typescript tsc

这里的实际问题是该项目依赖于全局TypeScript安装。在项目依赖项中编写typescript项目是很常见的,并在package.json NPM脚本中引用本地安装:

...
"scripts": {
  "build": "tsc"
},
"devDependencies": {
  "typescript": "~3.3.0"
"
...