Type Check 插件
Type Check 插件提供在单独的进程中运行 TypeScript 类型检查的能力,插件内部集成了 fork-ts-checker-webpack-plugin 。
介绍
fork-ts-checker-webpack-plugin
的类型检查逻辑与 TypeScript 原生的 tsc
命令基本一致,它会自动读取 tsconfig.json
中的配置项,也可以通过 Type Check 插件提供的配置项来修改默认行为。
插件在开发环境和生产环境下的行为有以下差异:
在开发环境构建时,类型错误不会阻塞构建流程,只会在 terminal 中输出错误日志。
在生产环境构建时,类型错误会导致构建失败,以保证生产环境代码的稳定性。
快速开始
安装插件
你可以通过如下的命令安装插件:
npm add @rsbuild / plugin - type - check - D
注册插件
你可以在 rsbuild.config.ts
文件中注册插件:
rsbuild.config.ts
import { pluginTypeCheck } from '@rsbuild/plugin-type-check' ;
export default {
plugins : [ pluginTypeCheck ( ) ] ,
} ;
选项
enable
是否开启 TypeScript 类型检查。
类型: boolean
默认值: true
示例:
禁用 TypeScript 类型检查:
pluginTypeCheck ( {
enable : false ,
} ) ;
仅在生产环境构建时开启类型检查:
pluginTypeCheck ( {
enable : process . env . NODE_ENV === 'production' ,
} ) ;
仅在开发环境构建时开启类型检查(不建议在生产环境构建时禁用类型检查,这会导致生产代码的稳定性下降):
pluginTypeCheck ( {
enable : process . env . NODE_ENV === 'development' ,
} ) ;
forkTsCheckerOptions
修改 fork-ts-checker-webpack-plugin
的选项,请参考 fork-ts-checker-webpack-plugin - README 了解可用选项。
类型: Object | Function
默认值:
const defaultOptions = {
typescript : {
// avoid OOM issue
memoryLimit : 8192 ,
// use tsconfig of user project
configFile : tsconfigPath ,
// use typescript of user project
typescriptPath : require . resolve ( 'typescript' ) ,
} ,
issue : {
exclude : [
{ file : '**/*.(spec|test).ts' } ,
{ file : '**/node_modules/**/*' } ,
] ,
} ,
logger : {
log ( ) {
// do nothing
// we only want to display error messages
} ,
error ( message : string ) {
console . error ( message . replace ( / ERROR / g , 'Type Error' ) ) ;
} ,
} ,
} ;
Object 类型
当 forkTsCheckerOptions
的值为 Object 类型时,会与默认配置进行深层合并。
pluginTypeCheck ( {
forkTsCheckerOptions : {
issue : {
exclude : [ { file : '**/some-folder/**/*.ts' } ] ,
} ,
} ,
} ) ;
Function 类型
当 forkTsCheckerOptions
的值为 Function 类型时,默认配置会作为第一个参数传入,你可以直接修改配置对象,也可以返回一个对象作为最终配置。
pluginTypeCheck ( {
forkTsCheckerOptions ( options ) {
options ?. issue ?. exclude . push ( {
file : '**/some-folder/**/*.ts' ,
} ) ;
} ,
} ) ;
注意事项
fork-ts-checker-webpack-plugin
不支持检查 .vue
文件中的 TypeScript 代码。
如果项目开启了 ts-loader
,并且手动配置了 compileOnly: false
,请关闭 Type Check 插件,避免重复类型检查。
性能优化
类型检查的性能开销较大,你可以参考 TypeScript 官方的 Performance 指南 来优化性能。
比如,正确配置 tsconfig.json
的 incldue
和 exclude
范围,可以有效较少不必要的类型检查,提升 TypeScript 性能:
tsconfig.json
{
"include" : [ "src" ] ,
"exclude" : [ "**/node_modules" , "**/.*/" ]
}