tsc 无法识别“--init”选项

Don*_*are 7 node.js typescript tsc yarnpkg

由于某种原因npx tsc --init打印出以下错误:

$ npx tsc --init
npx: installed 1 in 1.467s
error TS5023: Unknown compiler option 'init'.
Run Code Online (Sandbox Code Playgroud)

我已经typescriptYarn 2安装了这个包:

$ yarn add -D typescript
? YN0000: ? Resolution step
? YN0000: ? Completed in 0.31s
? YN0000: ? Fetch step
? YN0013: ? typescript@npm:3.9.3 can't be found in the cache and will be fetched from the remote registry
? YN0013: ? typescript@patch:typescript@npm%3A3.9.3#builtin<compat/typescript>::version=3.9.3&hash=8cac75 can't be found in the cache and will be fetched from the disk
? YN0000: ? Completed in 1.46s
? YN0000: ? Link step
? YN0000: ? Completed
? YN0000: Done in 1.95s
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么tsc不认识--init以及我做错了什么吗?


更新

正如丹尼尔发现的那样,问题在于npx没有找到或识别typescriptYarn 2 一起安装的包。解决方案是yarn改用:yarn tsc --init

Dan*_*iel 8

npx tsc --init您的输出来看,您似乎没有在typescript运行命令的目录中安装软件包。npx试图通过安装命令运行所需的任何软件包来提供帮助。

尽管它试图提供帮助,但最终没有安装人们期望在 2020 年安装的软件包。如果您运行,$ npx tsc -v您很可能会得到以下输出:

$ npx tsc -v
npx: installed 1 in 1.098s
message TS6029: Version 1.5.3
Run Code Online (Sandbox Code Playgroud)

typescript但是,如果您安装了该软件包,则会得到以下信息:

$ npx tsc -v
Version 3.9.3
Run Code Online (Sandbox Code Playgroud)

可以看到,安装的版本npm不同。那是因为npx最终安装的是tsc软件包而不是typescript. 该tsc软件包还提供了一个tsc命令。npx选择它而不是typescript因为,虽然两个包都提供了一个tsc命令,但它也被称为tsc. npx认为它更适合。

更新:

Yarn 2 引入了该Plug'n'Play功能。依赖项的安装方式与 Yarn 1 和npm过去的安装方式大不相同。

Yarn 1 并将npm包的代码node_modules放在每个项目的目录中。npx去那里寻找命令。

另一方面,Yarn 2 在共享位置安装包代码,并在您的项目中放置一个.pnp.js执行映射的单个文件。如果你为一个项目安装了一个包,如果你在另一个项目中使用它,你将不必再次下载它。

node_modules然而,任何依赖于 的工具都会被破坏。这就是为什么npx无法typescript在您的项目中找到的原因。npx不知道Plug'n'Play

您可以在此处阅读有关此功能的更多信息:https : //yarnpkg.com/features/pnp


Dor*_*rad 6

对于其他人来到这里使用 no yarnnor npx,在我的情况下解决它:

npm install -g typescript --force

编辑

  1. 我知道它没有回答确切的问题,但它确实处理了相同的错误。
  2. 我的npm解决方案的可能解释:之前有些东西坏了,可能是安装tsc而不是typescript,或者之前typescript安装本身有问题。 npm install将再次安装打字稿,--force标志用于忽略现有的本地文件并覆盖它们。