为啥 TypeScript 编译器会忽略 tsconfig.json?
Posted
技术标签:
【中文标题】为啥 TypeScript 编译器会忽略 tsconfig.json?【英文标题】:Why is the TypeScript compiler ignoring tsconfig.json?为什么 TypeScript 编译器会忽略 tsconfig.json? 【发布时间】:2017-01-16 20:46:39 【问题描述】:我有这个文件,是从教程中粘贴过来的(让我们面对现实吧,文档、tuts 和示例之间的差异令人震惊):
/scripts/tsconfig.json:
"compilerOptions":
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "commonjs",
"noEmitOnError": true,
"noImplicitAny": false,
"outDir": "../wwwroot/appScripts/",
"removeComments": false,
"sourceMap": true,
"target": "es5",
"moduleResolution": "node"
,
"exclude": [
"node_modules",
"typings/index",
"typings/index.d.ts"
]
选项设置为在保存时编译,但每当我保存 TypeScript 文件时,javascript 输出都会在源文件“下方”或“附加到”源文件中结束:
TypeScript
|
--test.ts
|
--test.js
,它在物理上与源 /TypeScript
位于同一目录中。如果tsconfig.json
缺失,编译器会报错,但当它存在时,编译器会忽略"outDir": "../wwwroot/appScripts/"
设置。
我真的是 Gulp 的新手,但 Gulp 任务对我来说看起来不错:
var tsProject = ts.createProject('scripts/tsconfig.json');
gulp.task('ts', function (done)
//var tsResult = tsProject.src()
var tsResult = gulp.src([
"scripts/*.ts"
])
.pipe(ts(tsProject), undefined, ts.reporter.fullReporter());
return tsResult.js.pipe(gulp.dest('./wwwroot/appScripts'));
);
【问题讨论】:
什么是ts
?是这个 gulp typescript 模块吗? npmjs.com/package/gulp-typescript
保存时编译在看什么?
【参考方案1】:
选项设置为保存时编译
当您保存文件时,它会自动编译该单个文件和导入该文件的文件。从您的 IDE 中关闭自动编译选项,因此编译器将考虑 tsconfig.json 文件。
在命令行中指定输入文件时, tsconfig.json 文件被忽略。
目录中存在 tsconfig.json 文件表明该目录是 TypeScript 项目的根目录。 tsconfig.json 文件指定编译项目所需的根文件和编译器选项。项目通过以下方式之一编译:
使用 tsconfig.json
通过在没有输入文件的情况下调用 tsc,在这种情况下,编译器会从当前目录开始搜索 tsconfig.json 文件并继续沿父目录链查找。
通过在没有输入文件和 --project(或仅 -p)命令行选项的情况下调用 tsc,该选项指定包含 tsconfig.json 文件的目录的路径。
https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
【讨论】:
感谢您的回答!这让我发疯,直到我想起我最近在 tsconfig.json 中添加了 '"compileOnSave": true'。 我仔细指定了所有这些编译器选项,然后,在一次未记录和奇怪的行为中,编译器忽略了编译器选项......因为我指定了一个输入文件?什么? 当您指定要编译的文件时,tsc 忽略您的配置文件是否有合理的原因?当您尝试通过在单个文件上测试配置以提高速度来调试配置时,这尤其令人讨厌。 5 年了,仍然准确。这应该是公认的答案。以上是关于为啥 TypeScript 编译器会忽略 tsconfig.json?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 .NET 的 Scala 编译器会忽略 val 的含义?
为啥使用“if-else”语句会在看似相同的三元运算符构造不会产生 TypeScript 编译器错误?
静音/忽略来自 TypeScript tsc 的 TS2307 错误
为啥默认禁用 TypeScript 中的不安全/非严格编译器规则?