配置基础项目结构 Vite + Vue3 初始化项目
项目使用的依赖:
- 使用 Vite 进行项目构建
- 使用 Sass 编写样式
- 对 pinia,vue-router,axios 进行模块化封装
- 使用 ElementPlus 组件库
pnpm install axios pinia pinia-plugin-persistedstate vue vue-router nprogress
# 本项目使用 element plus 大家可以根据个人习惯选择自己常用的组件库
pnpm install element-plus @element-plus/icons-vue
下面简单介绍一下这些依赖的作用,大家根据个人习惯选择安装即可。
- axios:vue官方推荐http请求库
- pinia:vue官方推荐状态管理工具
- pinia-plugin-persistedstate:pinia数据持久化插件
- vue-router:路由管理工具
- sass:css预处理
- element-plus:亲民老牌组件库
- nprogres:简洁美观的进度加载条组件
首先应该搭建一个基础的Vue项目结构
- 新建以下目录
|- src/ # 项目资源
|- assets/ # 经过打包的静态资源
|- components/ # 通用组件
|- styles/ # 项目通用样式
|- utils/ # 工具函数
|- http/axios/ # axios封装
|- views/ # 页面组件
|- App.vue # 项目的主组件
|- main.js # 入口js文件
| - index.html # 入口html文件
/src/App.vue
- 编写项目的主组件
<template>
<!-- 一般vue项目都会使用vue-router -->
<!-- 所以我们这里直接写一个 router-view -->
<router-view></router-view>
</template>
<script setup></script>
/src/main.js
- 引入样式文件,挂载Vue
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
import router from '@/router';
import pinia from "@/store/index.js";
import '@/styles/main.scss'
const app = createApp(App);
app.use(ElementPlus)
app.use(pinia)
app.use(router);
app.mount('#app');
vue-router
- 然后我们需要进行对路由的配置
- 这里路径中用到了
@是我们配置的别名,指向了src,在后面会讲解到如何配置
/src/router/index.js
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
// 配置路由
const routes = [{
path: '/', name: 'Home', component: () => import('@/views/home/HelloWorld.vue'), meta: {}, children: [],
}, {
path: '/Index', name: 'Index', component: () => import('@/views/index/HelloWorld.vue'), meta: {}, children: [],
}];
const router = createRouter({
history: createWebHashHistory(), routes,
});
router.beforeEach(async (_to, _from, next) => {
NProgress.start();
next()
});
router.afterEach((_to) => {
NProgress.done();
});
export default router;
vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
}
}
})
axios
/src/utils/http/index.js
import axios from 'axios';
const service = axios.create({
baseURL: '/',
timeout: 15000,
});
// axios实例拦截请求
service.interceptors.request.use(
(config) => {
return config;
},
(error) => {
return Promise.reject(error);
}
);
// axios实例拦截响应
service.interceptors.response.use(
(response) => {
},
(error) => {
}
);
export default service
引入sass,使用sass变量
安装依赖
pnpm install -D sass
vite内置对sass语法的解析,暂时不需要安装sass-loader.
我们可以单独新建一个存放变量的sass文件。例如_reset.scss
$theme-color: green;
全局使用
在vite中,我们可以在vite.config.js文件的css选项中配置。
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
}
},
css: {
preprocessorOptions: {
scss: {
additionalData: `@import "@/styles/_reset.scss";`,
},
},
},
})
组件使用
<style lang="scss" scoped>
.card{
background-color: $theme-color;
}
</style>