Node.js &引用;npx tsc——版本;在虚拟机内报告不同的TypeScript版本

Node.js &引用;npx tsc——版本;在虚拟机内报告不同的TypeScript版本,node.js,typescript,npm,tsc,npx,Node.js,Typescript,Npm,Tsc,Npx,我希望能够在我的主机和来宾操作系统上对我的项目运行npx tsc。但是客人使用的是另一个(旧)版本的tsc——我不知道它来自哪里 我的设置: 主机操作系统:Windows 10 来宾操作系统:Debian9 我使用的是VirtualBox,来宾使用VirtualBox的“共享文件夹”功能装载主机的文件-因此它没有单独的项目文件副本-我的项目始终通过共享文件夹访问 我没有在主机或来宾操作系统上全局安装Typescript(npm-g)(为了确认这一点,在主机+来宾操作系统上运行npm-g ls

我希望能够在我的主机和来宾操作系统上对我的项目运行
npx tsc
。但是客人使用的是另一个(旧)版本的
tsc
——我不知道它来自哪里

我的设置:

  • 主机操作系统:Windows 10
  • 来宾操作系统:Debian9
  • 我使用的是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
    我看到输出:
    消息TS6029:version 1.5.3
    意外!
因此,我无法运行
npx tsc
在guest中编译代码,因为它不支持我的一些较新的tsconfig设置

这个TSC1.5.3版本从何而来,我如何摆脱它

或者,我是否可以在主机上运行其他NPM命令,将可用的
tsc
安装到适用于Windows+Linux的项目中


此外,上面的父文件夹中没有一个
我的项目的根目录有一个
node\u modules
文件夹(当然,我的项目的根目录有它的node\u modules子文件夹)。

类型脚本二进制文件称为
tsc
。当它不是全局安装时,
npx
无法知道
tsc
是指
tsc
二进制的
typescript
包<代码>npx tsc
指的是

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

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”软件包是如何运行的?因为我没有在项目中或全局安装它,而且字符串“tsc”甚至不存在于package.json或package-lock.json文件中的任何位置。节点_模块下也没有“tsc”文件夹。另外,npx tsc--version正在报告
消息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,以防出现。如果您想让现有的-p typescript tsc表现不同,请使用
npx——忽略现有的-p typescript tsc