首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用路径编译器选项使用tsc编译特定文件

如何使用路径编译器选项使用tsc编译特定文件
EN

Stack Overflow用户
提问于 2017-06-21 13:02:06
回答 6查看 49.7K关注 0票数 52

我有几个文件我想用脚本编译。这些文件依赖于paths编译选项来解析其模块。由于我希望具体针对这些文件,所以我必须将它们提供给tsc (因为我不想为这个任务创建一个针对这些文件的单独的tsconfig.json )

我看过将--path参数传递给tsc的选项,但这是不允许的(error TS6064: Option 'paths' can only be specified in 'tsconfig.json' file.)

我可以在使用.ts选项时只编译特定的paths文件吗?

更新(22-06-17)

根据要求,有一些具体的例子:

tsconfig.json文件中的相关设置如下:

代码语言:javascript
运行
复制
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "Components/*": [
        "./src/Components/*"
      ]
    }
  }
}

因此,相关的部分是路径设置,您可以在其中创建速记,以便从某个目录导入文件。所以您可以导入像import {header} from 'Components/header.ts'这样的文件,而不是import {header} from '../../Components/header.ts'

但是我需要从命令行编译特定的文件。但如果我尝试:

代码语言:javascript
运行
复制
tsc --project tsconfig.json entryFile.ts

它会给我一个错误:

代码语言:javascript
运行
复制
error TS5042: Option 'project' cannot be mixed with source files on a command line.

如果我试图向cli提供paths选项,就会得到以下错误:

代码语言:javascript
运行
复制
error TS6064: Option 'paths' can only be specified in 'tsconfig.json' file.
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-06-25 15:53:51

指定命令行上的输入文件会使您的tsconfig.json无效。

当在命令行上指定输入文件时,tsconfig.json文件将被忽略。

来自TypeScript文档

因此,除了使用带有文件的适当“包含”(或排除)规范的tsconfig.json之外,没有其他选项。好消息是,在同一个文档中,您会发现:

tsconfig.json文件可以使用扩展属性从另一个文件继承配置。

因此,您可以做的是用如下所示的内容覆盖tsconfig的include属性:

代码语言:javascript
运行
复制
{
  "extends": "./tsconfig.json",
  "include": [
      "src/root/index.ts"
  ]
}

所以你可以做一个脚本:

  1. 使用所需的“include”属性创建临时‘’文件
  2. 使用指定为临时tsconfig的tsc调用--project

人们可能会争辩说,这是非常复杂的,并质疑他们为什么决定不适当地支持这种情况。然而,问题仍然存在,为什么我们只想编译一个项目的一个文件。在开发过程中,您可以使用watch (-w)选项来编译更改文件,并且在构建完整的项目时,您可能希望完全编译完整的项目。

票数 45
EN

Stack Overflow用户

发布于 2020-03-31 12:17:09

我也需要确保项目使用皮棉进行编译。如果允许tsconfig.json和文件路径的组合,您可以直接使用"tsc"作为一个分阶段的命令。

作为解决办法,我创建了下面的助手脚本scripts/tsc-lint.sh

代码语言:javascript
运行
复制
#!/bin/bash -e

TMP=.tsconfig-lint.json
cat >$TMP <<EOF
{
  "extends": "./tsconfig.json",
  "include": [
EOF
for file in "$@"; do
  echo "    \"$file\"," >> $TMP
done
cat >>$TMP <<EOF
    "unused"
  ]
}
EOF
tsc --project $TMP --skipLibCheck --noEmit

然后,分阶段配置包含:

代码语言:javascript
运行
复制
  "lint-staged": {
    "{src,tests}/**/*.ts": [
      "scripts/tsc-lint.sh"
    ]
  },

.tsconfig-lint.json文件被添加到.gitignore中。

票数 12
EN

Stack Overflow用户

发布于 2019-11-19 00:37:18

只是为了巩固@Bram的答案..。

我在我的项目中所做的是有两件事:

代码语言:javascript
运行
复制
project/
   dist/
   docs/
   src/
   package.json
   tsconfig.json
   tsconfig-build.json

所以我有一个tsconfig-build.json (因为我不希望docs/包含在我的构建中):

代码语言:javascript
运行
复制
// tsconfig-build.json

{
    "extends": "./tsconfig.json",
    "include": [
        "src/**/*"
    ]
}

那么您可以在package.json中使用一行

代码语言:javascript
运行
复制
// package.json
  ...

  "scripts": {

    ...

    "build": "tsc --p tsconfig-build.json"
  },
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44676944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档