我有几个文件我想用脚本编译。这些文件依赖于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
文件中的相关设置如下:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"Components/*": [
"./src/Components/*"
]
}
}
}
因此,相关的部分是路径设置,您可以在其中创建速记,以便从某个目录导入文件。所以您可以导入像import {header} from 'Components/header.ts'
这样的文件,而不是import {header} from '../../Components/header.ts'
。
但是我需要从命令行编译特定的文件。但如果我尝试:
tsc --project tsconfig.json entryFile.ts
它会给我一个错误:
error TS5042: Option 'project' cannot be mixed with source files on a command line.
如果我试图向cli提供paths
选项,就会得到以下错误:
error TS6064: Option 'paths' can only be specified in 'tsconfig.json' file.
发布于 2017-06-25 15:53:51
指定命令行上的输入文件会使您的tsconfig.json无效。
当在命令行上指定输入文件时,tsconfig.json文件将被忽略。
来自TypeScript文档。
因此,除了使用带有文件的适当“包含”(或排除)规范的tsconfig.json之外,没有其他选项。好消息是,在同一个文档中,您会发现:
tsconfig.json文件可以使用扩展属性从另一个文件继承配置。
因此,您可以做的是用如下所示的内容覆盖tsconfig的include属性:
{
"extends": "./tsconfig.json",
"include": [
"src/root/index.ts"
]
}
所以你可以做一个脚本:
tsc
调用--project
人们可能会争辩说,这是非常复杂的,并质疑他们为什么决定不适当地支持这种情况。然而,问题仍然存在,为什么我们只想编译一个项目的一个文件。在开发过程中,您可以使用watch (-w
)选项来编译更改文件,并且在构建完整的项目时,您可能希望完全编译完整的项目。
发布于 2020-03-31 12:17:09
我也需要确保项目使用皮棉进行编译。如果允许tsconfig.json
和文件路径的组合,您可以直接使用"tsc"
作为一个分阶段的命令。
作为解决办法,我创建了下面的助手脚本scripts/tsc-lint.sh
#!/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
然后,分阶段配置包含:
"lint-staged": {
"{src,tests}/**/*.ts": [
"scripts/tsc-lint.sh"
]
},
.tsconfig-lint.json
文件被添加到.gitignore
中。
发布于 2019-11-19 00:37:18
只是为了巩固@Bram的答案..。
我在我的项目中所做的是有两件事:
project/
dist/
docs/
src/
package.json
tsconfig.json
tsconfig-build.json
所以我有一个tsconfig-build.json
(因为我不希望docs/
包含在我的构建中):
// tsconfig-build.json
{
"extends": "./tsconfig.json",
"include": [
"src/**/*"
]
}
那么您可以在package.json
中使用一行
// package.json
...
"scripts": {
...
"build": "tsc --p tsconfig-build.json"
},
https://stackoverflow.com/questions/44676944
复制相似问题