当前位置:网站首页>[TypeScript]编译配置
[TypeScript]编译配置
2022-07-30 18:35:00 【十八岁讨厌编程】
博客主页:️十八岁讨厌编程️
所属专栏:TypeScript专栏
写文目的:记录学习中的知识点
*目前已更新内容涵盖:【前端】、【后端】、【人工智能】、【数据分析】、【网络爬虫】、【数据结构与算法】、【PS】、【计算机数学】等几个大方面
如果这篇文章对你有帮助,欢迎️关注
、点赞
、收藏
、留言
,看到我会积极回复。
编译配置
自动编译文件
编译文件时,使用 -w 指令后,TS编译器会自动监视文件的变化,并在文件发生变化时对文件进行重新编译。
示例:
tsc xxx.ts -w
自动编译整个项目
如果直接使用tsc指令,则可以自动将当前项目下的所有ts文件编译为js文件。
但是能直接使用tsc命令的前提时,要先在项目根目录下创建一个ts的配置文件 tsconfig.json
tsconfig.json是一个JSON文件,添加配置文件后,只需 tsc 命令即可完成对整个项目的编译
配置选项:
include
定义希望被编译文件所在的目录
默认值:[“**/*”]
示例:
"include":["src/**/*", "tests/**/*"]
上述示例中,所有src目录和tests目录下的文件都会被编译
**
代表任意目录*
代表任意文件
exclude
定义需要排除在外的目录
默认值:[“node_modules”, “bower_components”, “jspm_packages”]
示例:
"exclude": ["./src/hello/**/*"]
上述示例中,src下hello目录下的文件都不会被编译
extends
定义被继承的配置文件
示例:
"extends": "./configs/base"
上述示例中,当前配置文件中会自动包含config目录下base.json中的所有配置信息
files
指定被编译文件的列表,只有需要编译的文件少时才会用到
示例:
"files": [ "core.ts", "sys.ts", "types.ts", "scanner.ts", "parser.ts", "utilities.ts", "binder.ts", "checker.ts", "tsc.ts" ]
列表中的文件都会被TS编译器所编译
compilerOptions
编译选项是配置文件中非常重要也比较复杂的配置选项
在compilerOptions中包含多个子选项,用来完成对编译的配置
项目选项
target
设置ts代码编译的目标版本
可选值:
- ES3(默认)、ES5、ES6/ES2015、ES7/ES2016、ES2017、ES2018、ES2019、ES2020、ESNext
示例:
"compilerOptions": { "target": "ES6" }
- 如上设置,我们所编写的ts代码将会被编译为ES6版本的js代码
- 如果我们实在不记得,可以随便写一个值,然后通过报错来确定:
lib
指定代码运行时所包含的库(宿主环境)
可选值:
- ‘es5’, ‘es6’, ‘es2015’, ‘es7’, ‘es2016’, ‘es2017’, ‘es2018’, ‘es2019’, ‘es2020’, ‘esnext’, ‘dom’, ‘dom.iterable’, ‘webworker’, ‘webworker.importscripts’, ‘webworker.iterable’, ‘scripthost’, ‘es2015.core’, ‘es2015.collection’, ‘es2015.generator’, ‘es2015.iterable’, ‘es2015.promise’, ‘es2015.proxy’, ‘es2015.r
eflect’, ‘es2015.symbol’, ‘es2015.symbol.wellknown’, ‘es2016.array.include’, ‘es2017.object’, ‘es2017.sharedmemory’, ‘es2017.string’, ‘es2017.intl’, ‘es2017.typedarrays’, ‘es2018.asyncgenerator’, ‘es2018.asynciterable’, ‘es2018.intl’, ‘es2018.promise’, ’
es2018.regexp’, ‘es2019.array’, ‘es2019.object’, ‘es2019.string’, ‘es2019.symbol’, ‘es2020.bigint’, ‘es2020.promise’, ‘es2020.sharedmemory’, ‘es2020.string’, ‘es2020.symbol.wellknown’, ‘es2020.intl’, ‘esnext.array’, ‘esnext.symbol’, ‘esnext.asynciterable’, ‘esnext.intl’, ‘esnext.bigint’, ‘esnext.string’, ‘esnext.promise’, ‘esnext.weakref’
- ‘es5’, ‘es6’, ‘es2015’, ‘es7’, ‘es2016’, ‘es2017’, ‘es2018’, ‘es2019’, ‘es2020’, ‘esnext’, ‘dom’, ‘dom.iterable’, ‘webworker’, ‘webworker.importscripts’, ‘webworker.iterable’, ‘scripthost’, ‘es2015.core’, ‘es2015.collection’, ‘es2015.generator’, ‘es2015.iterable’, ‘es2015.promise’, ‘es2015.proxy’, ‘es2015.r
示例:
"compilerOptions": { "target": "ES6", "lib": ["ES6", "DOM"], "outDir": "dist", "outFile": "dist/aa.js" }
同样如果不记得,可以随便写一个值,然后通过报错来确定:
module
设置编译后代码使用的模块化系统
可选值:
- CommonJS、UMD、AMD、System、ES2020、ESNext、None
示例:
"compilerOptions": { "module": "CommonJS" }
outDir
编译后文件的所在目录
默认情况下,编译后的js文件会和ts文件位于相同的目录,设置outDir后可以改变编译后文件的位置
示例:
"compilerOptions": { "outDir": "dist" }
设置后编译后的js文件将会生成到dist目录
outFile
将所有的文件编译为一个js文件
默认会将所有的编写在全局作用域中的代码合并为一个js文件,如果module制定了None、System或AMD则会将模块一起合并到文件之中
示例:
"compilerOptions": { "outFile": "dist/app.js" }
- 以这段代码为例
- 执行结果:
这种功能我们一般结合打包工具来做,所以这个只需了解即可
rootDir
指定代码的根目录,默认情况下编译后文件的目录结构会以最长的公共目录为根目录,通过rootDir可以手动指定根目录
示例:
"compilerOptions": { "rootDir": "./src" }
allowJs
- 是否对js文件编译
- 功能演示:
- 未配置此项之前对src下文件进行编译,并用outDir指定编译后文件所在目录:
- 结果:
- 配置之后结果:
- 未配置此项之前对src下文件进行编译,并用outDir指定编译后文件所在目录:
checkJs
是否对js文件进行检查
也就是说是否在js文件中按照ts的规范进行文件检查
示例:
"compilerOptions": { "allowJs": true, "checkJs": true }
- 开启之后我们即使是在js文件中,以下代码也会报错:
removeComments
- 是否删除注释
- 也就是说对ts文件进行编译的时候,不会再把注释内容照搬进编译完成的js文件
- 默认值:false
noEmit
- 不对代码进行编译
- 这个用的少,有的时候我们可能只是想检查一下我们文件中的ts语法,此时可能会用到
- 默认值:false
noEmitOnError
- 当有错误时不生成编译后的文件
- 默认值:false
sourceMap
- 是否生成sourceMap
- 默认值:false
严格检查
strict
- 启用所有的严格检查,默认值为true,设置后相当于开启了所有的严格检查
alwaysStrict
- 用来设置编译后的文件是否使用严格模式
- 总是以严格模式对代码进行编译
- 效果:当我们把它设为true之后,编译后的文件:
- 如果此文件使用了引入导出,则本身就已经处于严格模式!
noImplicitAny
- 禁止隐式的any类型
noImplicitThis
- 禁止类型不明确的this
strictBindCallApply
- 严格检查bind、call和apply的参数列表
strictFunctionTypes
- 严格检查函数的类型
strictNullChecks
- 严格的空值检查
strictPropertyInitialization
- 严格检查属性是否初始化
额外检查
noFallthroughCasesInSwitch
- 检查switch语句包含正确的break
noImplicitReturns
- 检查函数没有隐式的返回值
noUnusedLocals
- 检查未使用的局部变量
noUnusedParameters
- 检查未使用的参数
高级
allowUnreachableCode
- 检查不可达代码
- 可选值:
- true,忽略不可达代码
- false,不可达代码将引起错误
noEmitOnError
- 有错误的情况下不进行编译
- 默认值:false
完整配置样例
目录结构:
tsconfig.json:
{
/* tsconfig.json是ts编译器的配置文件,ts编译器可以根据它的信息来对代码进行编译 "include" 用来指定哪些ts文件需要被编译 路径:** 表示任意目录 * 表示任意文件 "exclude" 不需要被编译的文件目录 默认值:["node_modules", "bower_components", "jspm_packages"] */
"include": [
"./src/**/*"
],
// "exclude": [
// "./src/hello/**/*"
// ]
/* compilerOptions 编译器的选项 */
"compilerOptions": {
// target 用来指定ts被编译为的ES的版本
// 'es3', 'es5', 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext'
"target": "es2015",
// module 指定要使用的模块化的规范
// 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'es2020', 'esnext'
"module": "es2015",
// lib用来指定项目中要使用的库
//'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es
//2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'webworker.iterable', 'scri
//pthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.r
//eflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.st
//ring', 'es2017.intl', 'es2017.typedarrays', 'es2018.asyncgenerator', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', '
//es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2020.bigint', 'es2020.promise', 'es2020.s
//haredmemory', 'es2020.string', 'es2020.symbol.wellknown', 'es2020.intl', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable
//', 'esnext.intl', 'esnext.bigint', 'esnext.string', 'esnext.promise', 'esnext.weakref'
// "lib": ["es6", "dom"]
// outDir 用来指定编译后文件所在的目录
"outDir": "./dist",
// 将代码合并为一个文件
// 设置outFile后,所有的全局作用域中的代码会合并到同一个文件中
//"outFile": "./dist/app.js"
// 是否对js文件进行编译,默认是false
// "allowJs": true,
// 是否检查js代码是否符合语法规范,默认是false
// "checkJs": true,
// 是否移除注释
"removeComments": true,
// 不生成编译后的文件
"noEmit": false,
// 当有错误时不生成编译后的文件
"noEmitOnError": true,
// 所有严格检查的总开关
"strict": true,
// 用来设置编译后的文件是否使用严格模式,默认false
"alwaysStrict": true,
// 不允许隐式的any类型
"noImplicitAny": true,
// 不允许不明确类型的this
"noImplicitThis": true,
// 严格的检查空值
"strictNullChecks": true
}
}
边栏推荐
- 常见链表题及其 Go 实现
- Node encapsulates a console progress bar plugin
- 不同的路径依赖
- OneFlow源码解析:Op、Kernel与解释器
- mysql的多实例
- 原生js系列
- Network Basics (3) 01-Basic Concepts of Networks - Protocols, Host Addresses, Paths and Parameters of URL Addresses & 127.0.0.1 Local Loopback Address & View URL IP Address and Access Ping Space + URL
- NC | Tao Liang Group of West Lake University - TMPRSS2 "assists" virus infection and mediates the host invasion of Clostridium sothrix hemorrhagic toxin...
- Chapter 4 Controlling the Execution Flow
- CCNA-NAT协议(理论与实验练习)
猜你喜欢
6块钱1斤,日本公司为何来中国收烟头?
开心的聚餐
ByteArrayInputStream 类源码分析
NC | 西湖大学陶亮组-TMPRSS2“助攻”病毒感染并介导索氏梭菌出血毒素的宿主入侵...
时序数据库在船舶风险管理领域的应用
线性筛求积性函数
AI Basics: Graphical Transformer
Node encapsulates a console progress bar plugin
CIMC Shilian Dafeitong is the global industrial artificial intelligence AI leader, the world's top AI core technology, high generalization, high robustness, sparse sample continuous learning, industri
natural language processing nltk
随机推荐
网络基础(二)-Web服务器-简介——WampServer集成服务器软件之Apache+MySQL软件安装流程 & netstat -an之检测计算机的端口是否占用
node封装一个控制台进度条插件
【Prometheus】Prometheus联邦的一次优化记录[续]
cocos creater 热更重启导致崩溃
设计消息队列存储消息数据的 MySQL 表格
ESP8266-Arduino编程实例-HC-SR04超声波传感器驱动
【PHPWord】Quick Start of PHPWord in PHPOffice Suite
Scrapy framework is introduced
Graphic LeetCode -- 11. Containers of most water (difficulty: medium)
mysql的多实例
Common linked list problems and their Go implementation
中集世联达工业级成熟航运港口人工智能AI产品规模化应用,打造新一代高效能智慧港口和创新数字港口,全球港航人工智能能领军者中集飞瞳
CCNA-子网划分(VLSM)
Go 系统收集
Critical Reviews | A review of the global distribution of antibiotics and resistance genes in farmland soil by Nannong Zou Jianwen's group
Meta元宇宙部门第二季度亏损28亿!仍要继续押注?元宇宙发展尚未看到出路!
原生js系列
【每日一道LeetCode】——191. 位1的个数
Immersive experience iFLYTEK 2022 Consumer Expo "Official Designated Product"
MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界