安装 vite
sh
# 推荐直接全局安装
npm i -g vite
# 直接用官方模板插件项目: https://vitejs.dev/guide/#trying-vite-online
# 或者也可以实用社区模板: https://github.com/vitejs/awesome-vite#templates
npm create vite@latest my-vue-app --template vue
# vue 就是模板的名字, 如果想插件 react 项目
npm create vite@latest my-react-app --template react
手动配置环境
安装依赖
sh
# vue2 项目依赖
npm i @vitejs/plugin-vue2 -D
npm i vue@2 vue-router@3 vuex@3
# vue3 项目依赖, vuex 可以替换为 pinia 使用哪个包都可以
npm i @vitejs/plugin-vue -D
npm i vue@3 vue-router@4 vuex@4
# react 项目依赖
npm i @vitejs/plugin-react -D
npm i react@18 react-dom@18 react-router@6 react-router-middleware-plus
# react-router-middleware-plus: 路由中间件
vue2 项目配置
js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue2";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
});
vue3 项目配置
js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
});
raect 项目配置
js
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
});
环境变量
使用 import.meta.env
来获取所有的环境变量
js
// 可以结合 zod 来校验 env
console.log(import.meta.env);
glob 导入
js
const dataModules = import.meta.glob("./datas/*.json");
一些有用的插件配置
注入替换字符
这个插件可以将源码中的一些 "特殊字符串" 替换为想要的值(只在打包的时候执行), 这个非常有用, 有时候需要在调试控制台中输出一些打包信息, 或者在某些 API 中返回 package.json
文件中的内容
js
import vue from "@vitejs/plugin-vue";
import { resolve } from "path";
import { defineConfig } from "vite";
import { replaceCodePlugin } from "vite-plugin-replace";
import pkgJson from "./package.json";
import dayjs from "dayjs"; // 注意: 请先安装 dayjs
// 将源码中的 from 替换为 to
const replacements = [
{
from: "__BUILD_TIME__",
to: dayjs().format("YYYY-MM-DD HH:mm:ss"),
},
{
from: "__BUILD_VERSION__",
to: pkgJson.version,
},
];
export default defineConfig({
plugins: [vue(), replaceCodePlugin({ replacements })],
});
js
// src/utils.js
export const version = "__BUILD_VERSION__";
// src/App.vue
import { version } from "./utils";
console.log(version);
sh
npm i vite-plugin-replace -D
自动导入插件配置
不要自动导入太多东西, 只将一些特别常用的库设置为自动导入即可(如: vue composition api) ref reactive cmoputed
因为这种的一看就知道这个 API 是做什么用的, 如果滥用这个插件, 就会导致看代码的时候不知道方法是从哪里来的, 还需要去看配置文件
js
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import AutoImport from 'unplugin-auto-import/vite';
import { resolve as resolvePath } from 'path';
// https://vitejs.dev/config/
export default defineConfig({
resolve: {
alias: {
'@': resolvePath('./src'),
},
},
plugins: [
vue(),
AutoImport({
include: [
// 哪些文件需要自动导入?
/\.[tj]sx?$/,
/\.vue$/,
/\.vue\?vue/,
/\.md$/,
],
imports: [
// 1. 使用插件默认的自动导入预设, 支持哪些预设? 请看这里:
// https://github.com/unplugin/unplugin-auto-import/tree/main/src/presets
'vue',
// 2.自定义自动导入
{
axios: [
['default', 'axios'], // 自动导入 axios
],
// 导入格式如下:
// "[package-name]": [
// "[import-names]",
// ["[from]", "[alias]"],
// ],
// 2.1 自动导入类型
{
from: 'vue-router',
imports: ['RouteLocationRaw'],
type: true,
},
dts: true,
// 2.3 禁止 eslint 检测报错
eslintrc: {
enabled: false,
// filepath: './.eslintrc-auto-import.json',
globalsPropValue: true,
},
},
],
}),
],
});
ts
import vue from "@vitejs/plugin-vue";
import { defineConfig } from "vite";
import { resolve as resolvePath } from "path";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import AutoImportComponents from "unplugin-vue-components/vite";
// https://vitejs.dev/config/
export default defineConfig({
resolve: {
alias: {
"@": resolvePath("./src"),
},
},
plugins: [
vue(),
AutoImportComponents({
// 自动按需导入 element-plus
extensions: ["vue"],
include: [/\.vue$/, /\.vue\?vue/],
resolvers: [ElementPlusResolver()],
}),
],
});
多页应用配置
为什么要使用多页应用的开发方式?
虽然大多数情况下, 单页应用已经足够解决问题了, 但是, 单页应用有个很明显的缺陷, 那就是 SEO 不够友好, 因为所有东西都是 js 动态生成的, 而搜索引擎的爬虫是不会去执行 js 的, 但是有的时候, 需要写一些静态的 "企业官网" 这种多个页面的某一部分高度相似, 而且需要控制不同页面的 title meta 标签, 并且不能是用js动态生成的
那么就需要用一些工具手动来实现 "组件化"
既然要使用多页, 为什么不直接手写?
- 直接手写源码不会打包压缩等
- 直接手写不好实现 "组件化", 虽然 jquery 有
$.load
这样的方法可以实现复用, 但是那种是需要发送请求的
"组件化"
注意: 这里的组件化, 并不是和 vue 或 react 中的组件一样, 直接使用虚拟 DOM 去实现的, 只是利用模板引擎的导入功能然后编译实现复用(相当于复制多份)
PUG 模板引擎学习
Pug 是一个用 JavaScript 实现的高性能的模板引擎,支持 Node.js 和浏览器运行环境,其灵感来自 Haml 项目
使用 vituum 插件
使用vituum插件就可以很方便的集成 pug
实现多页并且 "组件化"
配置示例