我正在使用Yarn工作区,我需要一个cli命令来检查位于packages/*
的源文件的类型。
最初,我使用webpack (使用esbuild,它不检查类型)和使用tsc --noEmit
独立检查类型来构建我的项目。他们合作得很好。
在切换到Yarn工作区后,我将整个项目分成了几个小包。
整个项目是这样的:
packages/
foo/
index.ts // import bar from 'bar'; console.log(bar);
package.json // { "name": "foo" }
tsconfig.json // { "references": [ { "path": "../bar" } ] }
bar/
index.ts // export default "hello world";
package.json // { "name": "bar" }
tsconfig.json // { "compilerOptions": { "composite": true } }
package.json // { "workspaces": [ "packages/*" ] }
然后我发现tsc
没能跑。当我尝试tsc --noEmit -p packages/foobar
时,它失败了,出现了一些错误,如:
Output file '/packages/foobar/index.d.ts' has not been built from source file '/packages/foobar/index.ts'.
然而,webpack工作得很好。
在上网后,官方文件告诉我,这两个功能只能在构建模式下使用。但是当我尝试tsc --noEmit -b packages/foobar
时,由于--noEmit
标志和构建模式之间的冲突,它也失败了。此外,如果我删除了--noEmit
标志,tsc
将尝试为我生成一堆.js
文件,但我不希望生成这些文件。
我只想要一个cli命令来检查类型,而不输出任何像我的IDE那样的额外文件。如何正确运行tsc
?或者有什么替代办法吗?
发布于 2022-05-07 19:41:36
尝试将typescript
作为依赖项添加到要检查的包的package.json
中。
(编辑):而且看起来tsc --noemit
不适用于项目引用.
发布于 2022-09-09 16:21:32
只是遇到了同样的问题,并通过使用TS项目参考资料和我将以下内容添加到tsconfig.json
中“解决了”
"compilerOptions": {
...
"emitDeclarationsOnly": true,
...
}
这告诉类型记录编译器不要将任何TS转到JS,而是只发出.d.ts
声明文件。
然后在我的package.json
中:
scripts: {
"lint": "tsc -b"
}
"
这将构建任何TS项目引用和您正在运行的tsc项目。虽然我们打开了'emitDeclarationOnly‘,但它只会为这个proj构建声明文件。
https://stackoverflow.com/questions/70631058
复制相似问题