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

Posted

技术标签:

【中文标题】“npx tsc --version” 报告虚拟机内不同的 TypeScript 版本【英文标题】:"npx tsc --version" reports different TypeScript version inside virtual machine 【发布时间】:2019-08-03 21:48:11 【问题描述】:

我希望能够在我的主机 + 来宾操作系统上的项目上运行 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 子文件夹)。

【问题讨论】:

【参考方案1】:

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"
"
...

【讨论】:

谢谢,npx -p typescript tsc 似乎满足了我的需求,并正确报告了 3.3.3333 版本。我很好奇旧的“tsc”包是如何运行的?因为我没有在项目中或全局安装它,而且我的 package.json 或 package-lock.json 文件中的任何地方都不存在字符串“tsc”。 node_modules 下也没有“tsc”文件夹。 npx tsc --version 也在报告 message TS6029: Version 1.5.3 - 这似乎不是“tsc”包的版本号? (其版本号使用不同的格式)。 我在主机或来宾文件系统的任何地方都找不到任何“tsc”包。 npx 是否会在运行后临时下载副本并删除它或类似的东西? (我在运行它时看到一条消息npx: installed 1 in 1.998s)或者“tsc”包文件来自哪里? 是的,npx 就是这样做的。它安装一个临时副本。 tsc 具有最新的 1.20150623.0 版本而不是 1.5.3 意味着该包在内部使用不同的版本来显示 -v 并且没有从 package.json 中获取它。 对不起,我不明白为什么 npx 没有得到新版本的 TSC? @MuradSofiyev 它使用全局安装的 TS,以防万一。如果您希望它的行为有所不同,请使用 npx --ignore-existing -p typescript tsc

以上是关于“npx tsc --version” 报告虚拟机内不同的 TypeScript 版本的主要内容,如果未能解决你的问题,请参考以下文章

创建自己的 npx 命令 - 不运行/啥都不做

Kvmclock存在的问题

Kvmclock存在的问题

Kvmclock存在的问题

Kvmclock存在的问题

[Node] Run Any Version of a Node Tool with npx