打字稿:使 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 发出一个文件夹而不是另一个文件夹的主要内容,如果未能解决你的问题,请参考以下文章

打字稿配置:模块设置是不是区分大小写?

自定义打字稿定义在 Windows 10 上不起作用

打字稿 2.0。 tsconfig.json 中的“类型”字段

打字稿 tsc --declaration

打字稿构建从 node_modules 文件夹中获取错误

从项目根目录导入打字稿