5

我希望能够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出乎意料

所以我无法npx tsc在来宾内部运行编译我的代码,因为它不支持我的一些较新的 tsconfig 设置。

这个 tsc 1.5.3 版本是从哪里来的,我该如何摆脱它?

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

此外,我的项目根目录上方的所有父文件夹都没有node_modules文件夹(但我的项目根目录当然有它的 node_modules 子文件夹)。

4

1 回答 1

13

TypeScript 二进制文件被称为tsc简短。当它没有全局安装时,npx无法知道是tsctsc二进制typescript包。npx tsc不推荐使用的tsc

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

npx -p typescript tsc

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

...
"scripts": {
  "build": "tsc"
},
"devDependencies": {
  "typescript": "~3.3.0"
"
...
于 2019-03-13T09:39:44.483 回答