vite和ts的结合
使用ts
我们基于vite-test
,直接把main.js
改为main.ts
就可以直接使用ts语法了,并且结合编辑器的提示,进行类型检查
然而我们还是可以正确看到控制台的打印
错误提示
我们希望这种错误可以提示出来,所以安装插件vite-plugin-checker
根据vite-plugin-checker给出的提示完成前两步,启动项目,这时会发现缺少tsconfig.json
{
"compilerOptions": {
"skipLibCheck": true,//跳过node_module目录的检查
}
}
这个时候启动项目就会发现在终端显示错误日志了
在页面中也会以弹框的形式展示给开发者
官网给出了解释为什么不引入checker,vite不给我们报错的原因
生产检查
我们修改build的script命令
"build": "tsc --noEmit && vite build"
这样在打包的前检查到了语法错误,就不会执行打包构建工作了
声明文件
我们在使用环境变量的时候会给错误提示
import.meta
只能在高级的js语法中出现,所以我们修改ts配置
compilerOptions.module: "ESNext"
错误消失,然后我们使用.env
就又会提示错误
我们就需要了解声明文件
新建一个叫vite-env.d.ts
的文件,vite暴露出一个客户端相关的类型vite/client
,以下使用三斜线指令,就相当于import vite/client
/// <reference types="vite/client" />
然后我们继续向下读我们的配置文件,发现并没有我们写好的配置
我们写一个接口暴露给vite,最终vite是要读这个默认文件的,发现有这个文件后,会把ImportMetaEnv
与默认的类型进行合并
interface ImportMetaEnv {
readonly ABC_HI:string
}
因为我在配置里写的是匹配ABC_
为前缀,所以显示的不是默认VITE_
补充:
为什么我们在vite.config.js里可以使用esmodule:
主要是因为vite在读取配置文件并执行的前一刻会进行替换
模块解析方案
现在vite也是ts不知道你的模块解析方案是什么,所以在main.ts
导入第三方包的时候会给出如下提示:
提示我们把compilerOptions.moduleResolution
设置为node
,配置模块解析方案为node,就会去node_modules
里面去找了,找到就不会有错误提示了
然后这个时候会提示我们没有声明文件
假设我们在安装某个库以后没有ts的类型声明,所以可以需要根据提示去安装包
npm i --save-dev @types/lodash
后续导包也会有提示