文件选项
{// 要编译的文件的数组"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"]}
