Diretório de artigos
1. Configuração do alias src
- Baixar
path
módulo
npm i @tipos/caminho
vue.config.ts
Configure o caminho do alias em
// vite.config.ts
import {
defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
"@": path.resolve("./src") // 相对路径别名配置,使用 @ 代替 src
}
}
})
existirTypeScripe配置编译命令
// tsconfig.json
{
"compilerOptions": {
"baseUrl": "./", // 解析非相对模块的基地址,默认是当前目录
"paths": {
//路径映射,相对于baseUrl
"@/*": ["src/*"]
}
}
}
2. configuração SVG
- Instalar dependências
npm install vite-plugin-svg-icons -D
vite.config.ts
Configure o plugin em
import {
createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'
export default () => {
return {
plugins: [
createSvgIconsPlugin({
// Specify the icon folder to be cached
iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
// Specify symbolId format
symbolId: 'icon-[dir]-[name]',
}),
],
}
}
- Importar para principal
import 'virtual:svg-icons-register'
- usar
注意点
O nome da pasta é opcional, consulte o caminho de armazenamento específico e o caminho de configuração do plug-in.
<svg aria-hidden="true">
<!-- #icon-文件夹名称-图片名称 -->
<use href="#icon-login-eye-off" />
</svg>
2.1 Encapsulando componentes globais SVG
src/components
Crie umSvgIcon
componente no diretório
<template>
<div>
<svg :style="{ width: width, height: height }">
<use :xlink:href="prefix + name" :fill="color"></use>
</svg>
</div>
</template>
<script setup lang="ts">
defineProps({
//xlink:href属性值的前缀
prefix: {
type: String,
default: '#icon-'
},
//svg矢量图的名字
name: String,
//svg图标的颜色
color: {
type: String,
default: ""
},
//svg宽度
width: {
type: String,
default: '16px'
},
//svg高度
height: {
type: String,
default: '16px'
}
})
</script>
<style scoped></style>
- Crie um arquivo na pasta src
index.ts
: usado para registrar todos os componentes globais na pasta de componentes
import SvgIcon from './SvgIcon/index.vue';
import type {
App, Component } from 'vue';
const components: {
[name: string]: Component } = {
SvgIcon };
export default {
install(app: App) {
Object.keys(components).forEach((key: string) => {
app.component(key, components[key]);
})
}
}
- Declare o tipo de componente global.
types/components.d.ts
Para configuração específica, consulte element-plus.
// 设置全局组件类型
import SvgIcon from '@/components/SvgIcon.vue'
// 2. 声明 vue 类型模块
declare module 'vue' {
// 3. 给 vue 添加全局组件类型,interface 和之前的合并
interface GlobalComponents {
// 4. 定义具体组件类型,typeof 获取到组件实例类型
// typeof 作用是得到对应的TS类型
SvgIcon: typeof SvgIcon
}
}
- Introduzir arquivos no arquivo de entrada e instalar plug-ins personalizados
src/index.ts
por meio de métodosapp.use
import gloablComponent from './components/index';
app.use(gloablComponent);
3. Integre scss e css para completar a personalização do tema
Em primeiro lugar, $
ambos e :root
são métodos para definir variáveis CSS, mas apresentam algumas diferenças.
:root
Seletores são usados para definir variáveis CSS globais, geralmente usadas no elemento raiz (ou seja, elemento HTML). Por exemplo:
:root {
--primary-color: #007bff;
}
body{
color:var(--primary-color)
}
-
Isso define uma variável global chamada --primary-color que pode ser usada em toda a página.
-
E
$
éSass
ou@
éLess
sintaxe para definir variáveis em pré-processadores CSS. EmSass
, você pode usar$
a notação para definir variáveis, por exemplo:
$primary-color: #007bff;
body {
color: $primary-color;
}
- Isso define uma
$primary-color
variável chamada e a aplica ao atributo color no elemento body. - Em geral,
:root
é usado para definir variáveis CSS globais e$
para definir variáveis no pré-processador. Ambos funcionam de forma semelhante, mas usam métodos ligeiramente diferentes.
3.1 Configurar scss in vite
Ao usá-lo no arquivo de estilo global index.scss, $ 变量
um erro será relatado, portanto, variáveis globais precisam ser introduzidas no projeto $
.
$base-menu-background: #001529;
::-webkit-scrollbar-track {
background: $base-menu-background;
}
- A configuração do arquivo é
vite.config.ts
a seguinte:
export default defineConfig((config) => {
css: {
preprocessorOptions: {
scss: {
// 用于解析$定义的样式
javascriptEnabled: true,
additionalData: '@import "./src/styles/variable.scss";',
},
},
},
}
}
4. Configuração de variável de ambiente
Durante o processo de desenvolvimento do projeto, haverá três etapas: ambiente de desenvolvimento, ambiente de teste e ambiente de produção (ou seja, ambiente formal). O status das solicitações (como endereços de interface, etc.) em diferentes estágios é diferente. A troca manual do endereço da interface é bastante tediosa e propensa a erros. Então surgiu a necessidade de configuração de variáveis de ambiente. Precisamos apenas fazer uma configuração simples e deixar o trabalho de mudar os estados do ambiente para o código.
Os desenvolvedores do ambiente de desenvolvimento (desenvolvimento)
trabalham em seu próprio ramo de desenvolvimento.Quando o desenvolvimento atinge um determinado nível, os colegas mesclam o código e realizam a depuração conjunta.
Ambiente de teste (teste)
é o ambiente onde os colegas de teste trabalham. Geralmente é implantado pelos próprios colegas de teste e depois testado neste ambiente.
O ambiente de produção (produção)
refere-se ao ambiente usado para operação formal e entrega no desenvolvimento de software. O ambiente de produção geralmente desativa o relatório de erros e ativa os logs de erros. (Ambiente fornecido oficialmente aos clientes.)
Nota: Geralmente, um ambiente corresponde a um servidor, e os ambientes de desenvolvimento e teste de algumas empresas são um servidor! ! !
- Adicione arquivos para ambientes de desenvolvimento, produção e teste ao diretório raiz do projeto, respectivamente!
.env.development
.env.production
.env.test
ambiente de desenvolvimento
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV = 'development'
VITE_APP_TITLE = '项目的标题'
VITE_APP_BASE_API = '/dev-api'
Ambiente de produção
NODE_ENV = 'production'
VITE_APP_TITLE = '项目标题'
VITE_APP_BASE_API = '/prod-api'
ambiente de teste
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV = 'test'
VITE_APP_TITLE = '项目的标题'
VITE_APP_BASE_API = '/test-api'
package.json
Execute o comando na configuração
"scripts": {
"dev": "vite --open",
"build:test": "vue-tsc && vite build --mode test",
"build:pro": "vue-tsc && vite build --mode production",
"preview": "vite preview"
},
index.html
usado emVITE_APP_TITLE
- Instalar plugin
npm add vite-plugin-html -D
vite.config.ts
Configuração
import {
createHtmlPlugin } from 'vite-plugin-html'
plugins: [
createHtmlPlugin()
]
index.html <%=环境变量名%>
Obter valor
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><%=VITE_APP_TITLE%></title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script
5. Adaptação do terminal móvel
- Use para
vw
completar a adaptação do terminal móvel
e instalar o módulo
npm install postcss-px-to-viewport -D
Configuração: postcss.config.ts
module.exports = {
plugins: {
'postcss-px-to-viewport': {
// 设备宽度375计算vw的值
viewportWidth: 375,
},
},
};
6. Carregar automaticamente sob demanda
- Instalar
npm i unplugin-vue-components -D
- usar
import Components from 'unplugin-vue-components/vite'
plugins: [
// 解析单文件组件的插件
vue(),
// 自动导入的插件,解析器可以是 vant element and-vue
Components({
dts: false,
// 原因:Toast Confirm 这类组件的样式还是需要单独引入,样式全局引入了,关闭自动引入
resolvers: [VantResolver({
importStyle: false })]
})
],
- e uso
npm i ant-design-vue@next
import Components from 'unplugin-vue-components/vite'
import {
AntDesignVueResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({
plugins: [
.......其它plugins配置
Components({
resolvers: [
AntDesignVueResolver(),
]
}),
........其它plugins配置
]
})
Link de referência de uso detalhado
7. configuração simulada
- Instalar
pnpm i vite-plugin-mock mockjs -D
vite.config.ts
Habilite o plugin no arquivo de configuração
import {
viteMockServe } from 'vite-plugin-mock'
plugins: [
viteMockServe({
// mockPath 默认不配置地洞找src同级的目录
mockPath: './src/mock',
localEnabled: true
})
]
//用户信息数据
function createUserList() {
return [
{
userId: 1,
avatar:
'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
username: 'admin',
password: '111111',
desc: '平台管理员',
roles: ['平台管理员'],
buttons: ['cuser.detail'],
routes: ['home'],
token: 'Admin Token',
},
{
userId: 2,
avatar:
'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
username: 'system',
password: '111111',
desc: '系统管理员',
roles: ['系统管理员'],
buttons: ['cuser.detail', 'cuser.user'],
routes: ['home'],
token: 'System Token',
},
]
}
export default [
// 用户登录接口
{
url: '/api/user/login',//请求地址
method: 'post',//请求方式
response: ({
body }) => {
//获取请求体携带过来的用户名与密码
const {
username, password } = body;
//调用获取用户信息函数,用于判断是否有此用户
const checkUser = createUserList().find(
(item) => item.username === username && item.password === password,
)
//没有用户返回失败信息
if (!checkUser) {
return {
code: 201, data: {
message: '账号或者密码不正确' } }
}
//如果有返回成功信息
const {
token } = checkUser
return {
code: 200, data: {
token } }
},
},
// 获取用户信息
{
url: '/api/user/info',
method: 'get',
response: (request) => {
//获取请求头携带token
const token = request.headers.token;
//查看用户信息是否包含有次token用户
const checkUser = createUserList().find((item) => item.token === token)
//没有返回失败的信息
if (!checkUser) {
return {
code: 201, data: {
message: '获取用户信息失败' } }
}
//如果有返回成功信息
return {
code: 200, data: {
checkUser} }
},
},
]