打字稿:使 tsconfig 发出一个文件夹而不是另一个文件夹
Posted
技术标签:
【中文标题】打字稿:使 tsconfig 发出一个文件夹而不是另一个文件夹【英文标题】:Typescript: Make tsconfig emit one folder but not the other folder 【发布时间】:2019-05-20 05:33:46 【问题描述】:我正在将现有项目从 js 转换为 typescript。我希望能够在一个文件夹上设置noEmit = true
,但让另一个文件夹具有noEmit = false
。
原因是我通过 webpack 设置了我的客户端(角度)代码,并且不需要打字稿来为我生成 javascript。虽然服务器(Node/express)仍然需要生成为 javascript。
我尝试了几种不同的组合,但似乎没有找到正确的方法。
我能够开始工作的唯一解决方案是拥有两个tsconfig.json
并运行类似tsc -p src\server\tsconfig && tsc -p src\client\tsconfig
的命令
我意识到这不是一个好的解决方案,但我没有让单个 tsconfig 工作,也没有基本的 tsconfig。
这是文件夹结构..
|-Src
|--/client
|--/server
有没有办法使用单个 tsc 命令来实现这一点?还是有更好的方法来格式化项目?谢谢!!
【问题讨论】:
【参考方案1】:根据this answer 和this comment,除了拥有多个 tsconfig.json 文件之外,我认为没有其他解决方案。
您可以通过使用 tsconfig.json
进行编译和在 package.json 中用于构建的单独 tsconfig-build.json
来简化这一点,即:
// package.json
"scripts":
"build": "tsc -p tsconfig-build.json"
,
// ...
使用此设置(假设默认 tsconfig.json is in your root),从命令行运行 tsc
将使用默认 tsconfig.json,但运行 npm run build
将使用 tsconfig-build.json。你也可以有one tsconfig extend from another,所以如果你有很多共同的选项,你可以添加一个tsconfig-base.json
,这两个配置都是从其扩展而来的。
【讨论】:
【参考方案2】:您可以使用 tsconfig.json 文件中的 exclude 属性实现您想要的。
检查documentation 对于排除属性
【讨论】:
这将从打字稿编译器检查中排除客户端文件夹。我仍然想要那个功能,只是不让它发出 我知道我认为您的解决方案被卡住了,因为您无法为每个文件/目录指定 noEmit 属性。我想你正在使用 ts-loader,如果是这样,那么你应该让编译器通过 webpack 检查并删除你的第二个命令以上是关于打字稿:使 tsconfig 发出一个文件夹而不是另一个文件夹的主要内容,如果未能解决你的问题,请参考以下文章