以前开发都是在用脚手架,几乎0配置,只须要会ts的语法就彻底能够开发ts项目了,此次本身从零折腾了一个ts项目,发现配置方面仍是有挺多坑的,因此不如从头看一下具体的方法和文档,因而总结出了这篇文章。相信我,本身系统的了解一遍和使用脚手架直接配置相比,理解上确定会有不同的认知。
本文主要从简单的方式了解tsconfig.json是干什么的、怎么用、和webpack结合起来会有一些常见的坑以及一些经常使用的配置,结合文档来看效果更佳 www.typescriptlang.org/v2/en/tscon…
因为第一次写文章,确定会有些不严谨或者很差的地方,请你们多多指出建议,谢谢~react
用于编译时遵循的规则表webpack
在没有tsconfig的状况下,咱们能够用命令行的方式去执行es6
tsc --outFile file.js --target es3 --module commonjs index.ts
web
解释上半句:将index.ts用es3的代码和commonjs的形式,编译为file.js在根目录下typescript
上文有阐述,得本身打一坨json
tsconfig.json
,此时,编译器会从当前路径开始寻,直到找到tsconfig.json文件为止和require,import不写具体路径的查找规则差很少--project
(或缩写 -p
)指定一个包含 tsconfig.json
的路径,和import,require写个相对路径差很少配置文件里有不少参数,具体场景有的确实还比较抽象,这里统一举例说明数组
这个tsconfig.json
大致能够分为两个部分描述,第一部分是编译的规则配置(compilerOptions),第二个部分是对哪些文件进行编译(files,include,exclude)promise
最经常使用的结构代码举例以下:数据结构
{
"compilerOptions": {},
"files": [],
"include": [],
"exclude": []
}
复制代码
顾名思义就是编译规则,下面会具体说一些经常使用的详细配置app
用法很简单,就是个数组,里面的元素为待编译的ts文件,以下图。
files就是根据上面编译规则须要将哪些文件编译,举个例子
上面的配置文件的规则就是将compilerOption的编译规则应用于index.ts下,那若是我下面这样写就确定会报错了
因此得出结论:file适用于比较小型的项目,规定几个特定的文件。
最后一个小细节,file里面只是入口文件,好比test里面依赖一个rely.ts
那么在files中不写rely.ts也不会报错。在当前目录下运行一下tsc作比较就知道了~
那文件不少的项目怎么办,下面的include和exclude就派上用场了
当文件有不少的时候,就能够用include和exclude(固然也能够不用)结合使用,好比如今只想让src下的除了带except文件编译,如图所示:
在该项目根目录输入tsc会发生什么呢?
会发现并无编译except.ts的文件
当用webpack进行打包并暴露出bundle文件的时候会和tsconfig产生冲突,由于他俩都是编译/打包出来的文件,所以要在tsconfig.json中添加exclude到webpack打包出的指定路径,理解如图:
把注释中的引开就解决这个问题了~
容许编译js文件
生成一个.map.js的文件,用于其余工具来debugg,相似于webpack的sourceMap
不容许用any,若是初学ts,建议项目部太复杂的状况下,能够借此来进行限制,前置本身培养对ts的理解
这两个有必定的关联关系
target是编译成哪一个版本的js(es3,es5,es6...)
module模板生成的形式,默认状况下,当target是es3的时候,那module默认为commonjs形式,不然为es6形式。
注意(和outFile搭配使用):生成的模块形式:none、commonjs、amd、system、umd、es六、es2015 或 esnext 只有 amd 和 system 能和 outFile 一块儿使用 target 为 es5 或更低时可用 es6 和 es2015
引入ES的功能库,好比想在项目中用js中Set,Map等新的数据结构,或promise等,那要在lib中引入es2015
编译出的文件是否带注释,当为false的时候能够减小编译出文件的体积
这个配置挺重要的,若是不知道会很纳闷,很差排查为啥会报错
当它为false的时候,引入模块的时候必须以*as的形式,例如引入react
import * as React from 'react'
当为true的时候
import React from 'react'
若是用tsx文件(React-ts)那么该项要配置成 jsx:"react"
举个例子:
在根目录的src目录有个hello文件夹,其中hello里包含world.ts
在根目录的app.ts下
import { example } from "./src/hello/world"
当baseUrl: './src'
则上面的目录能够简写成import { example } from "hello/world"
paths必须和上面的baseUrl联用,举个例子:
可是有一点必需要特别注意:
若是用了webpack使用了alias,那么致使baseUrl不会生效,从而paths也不会生效,因此paths岂不是没用了吗?其实从实际做用来讲确实是没用了,不过能够将paths的配置和alias配置成同样的,在vscode中会有路径的自动提示,也是很方便很爽的