文件选项
{
// 要编译的文件的数组
"files": [
"src/a.ts"
],
// 要包含的文件夹
// src代表src下的所有ts文件
// src/* 代表src下的ts文件(不递归)
// src/*/*代表文件夹下的文件夹的ts文件
"include": [
"src"
],
// 排除什么文件夹内的ts文件
"exclude": [
"src/lib"
]
// 多个条件,exclude会将前面的命中的剔除掉
// 集成另外一个文件的配置文件,如果配置冲突,后者为准
"extends": "./tsconfig.base",
}
编译选项
{
"compilerOptions": {
"incremental": true, //增量编译,生成了一个 tsconfig.tsbuildinfo 文件
"diagnostics": true, //打印诊断信息
"tsBuildInfoFile": "./buildFile", //增量编译文件的存储位置
"target": "es5",
"module": "commonjs",
"jsx": "react",
"esModuleInterop": true,
"outFile": "./app.js", //将多个相互依赖的文件生成一个文件,可用在AMD模块中
"lib": ["es5", "dom", "scripthost", "es2019"], //TS需要引用的库,即申明文件,es5默认引入 'es5', 'dom', 'scripthost', 如果需要引用类库es2019,可能就要引用
"allowJs": true, //允许编译js文件(js jsx)
"checkJs": true, //允许在js文件中报错,通常和allowJs一起使用,不知道打开有啥子实用价值
"outDir": "./out", // 指定输出目录,不指定的话,js还是编译成js,最后会导致报错(因为会覆盖自己)
"rootDir": "./src", //编译的文件没记录 如果指定为./ out中会有 src;如果指定 ./src out中则只有src下的内容
"declaration": true, //生成声明文件
"declarationDir": "./d", //生成声明文件的目录
"emitDeclarationOnly": true,//只生成声明文件
"sourceMap": true,//生成sourceMap文件
"inlineSourceMap": true,//生成inline souceMap
"declarationMap": true,//为声明文件生成sourceMap
"typeRoots": [], // 默认 node_modules/@types下查找
"types": [], //指明需要加载的声明文件的包
"noEmit": true, //不输出文件
"noEmitOnError": true,//发生错误时不输出文件
"noEmitHelpers": true,//不生成工具函数,节约编译后的代码提及,结合下一个属性
"importHelpers": true,//通过 tslib 引入helper函数,文件必须是模块
"downlevelIteration": true, //降级遍历器的实现(es3/es5)
},
}
工程引用
工程引用解决的是这样一个问题,假定我们项目有 src/server src/client src/common在平级的文件夹,common被另外两个文件夹引用,如果只有一个tsconfig.json,那么构建是一次性src下所有的内容都进行了构建。
另外,如果 src 还有平级目录 test,那么哪怕你一次构建项目目录,结果可能也不是你想要的:测试的内容被混入了,因此我们希望提供,想构建哪个文件夹,就构建哪个文件夹的配置能力。
它主要通过如下方法来实现:
- 在每个文件夹中提供一个自己的tsconfig.json
- 自己的tsconfig.json可以
- 集成自base的tsconfig.json
- 可以指定自己的构建输出位置
- 可以指定自己依赖的其他模块
通过在tsc构建命令中 -b 的参数,就可以有指向性地进行构建。
TypeScript语言本省就是使用使用工程引用的方式进行构建的,文件之间进行了相互引用(继承/依赖)。
例如 src/server/tsconfig.json 的文件如下
{
"extends": "../tsconfig-base",
"compilerOptions": {
"removeComments": false,
"outFile": "../../built/local/server.js",
"preserveConstEnums": true,
"types": [
"node"
]
},
"references": [
{ "path": "../compiler" },
{ "path": "../jsTyping" },
{ "path": "../services" }
],
"files": [
"types.ts",
"utilitiesPublic.ts",
"utilities.ts",
"watchType.ts",
"protocol.ts",
"scriptInfo.ts",
"typingsCache.ts",
"project.ts",
"editorServices.ts",
"moduleSpecifierCache.ts",
"packageJsonCache.ts",
"session.ts",
"scriptVersionCache.ts"
]
}