Vite中配置项TS类型提示
vite
的默认配置文件是 vite.config.ts
,最基础的配置文件格式如下:
ts
export default {
// 配置选项
};
我们也可以通过 –-config
命令行选项指定一个配置文件,命令行输入: vite --config configFile.js
。
采用 vscode
编译器增添 vite
配置时,编译器是没有任何提示的,这对我们很不友好!(下图的提示并不是 vite
的可选配置提示,是插件对JS语法的通用提示)
WebStorm
有很好的语法补全功能,而 vscode
却没有。因此若想让编译器给予智能提示,可以通过以下两种方式来进行特殊处理。
defineConfig
使用官方提供的 defineConfig
,可以发现存在配置项提示。
通过查看源码:
ts
export type UserConfigFn = (
env: ConfigEnv
) => UserConfig | Promise<UserConfig>;
export type UserConfigExport =
| UserConfig
| Promise<UserConfig>
| UserConfigFn;
/**
* Type helper to make it easier to use vite.config.ts
* accepts a direct {@link UserConfig} object, or a function that returns it.
* The function receives a {@link ConfigEnv} object that exposes two properties:
* `command` (either `'build'` or `'serve'`), and `mode`.
*/
export function defineConfig(config: UserConfigExport): UserConfigExport {
return config;
}
就可以发现本质上就是使用 TypeScript
来做类型提示。
jsdoc 注释法
jsDoc
是一个用于 JavaScript
的 API
文档生成器,官网。
通过注释的方式使引用的对象存在类型提示:
ts
/** @type import("vite").UserConfig */
环境模式配置
webpack
时代,基于不同的环境,开发者通常会设置不同的配置文件,如:webpack.dev.config
、webpack.prod.config
、webpack.base.config
...
在 vite
中,基于不同环境设置不同配置,只需要导出这样一个函数:
ts
export default defineConfig(({ command, mode, ssrBuild }) => {
if (command === 'serve') {
return {
// dev 独有配置
};
} else {
// command === 'build'
return {
// build 独有配置
};
}
});
优化一下写法:
ts
import { defineConfig } from 'vite';
import viteBaseConfig from './vite.base.config';
import viteDevConfig from './vite.dev.config';
import viteProdConfig from './vite.prod.config';
const envResolver = {
// build: () => ({...viteBaseConfig,viteProdConfig}) 这种方式也可以
// Object.assign 中的 {} 是为了防止 viteBaseConfig 被修改。
build: () => ({ ...viteBaseConfig, ...viteProdConfig }),
serve: () => ({ ...viteBaseConfig, ...viteDevConfig })
};
export default defineConfig(({ command, mode, ssrBuild }) => {
return envResolver[command]();
});
同时 defineConfig
也支持异步配置。如果配置需要调用一个异步函数,也可以转而导出一个异步函数:
ts
export default defineConfig(async ({ command, mode }) => {
const data = await asyncFunction();
return {
// vite 配置
};
});