欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Vue3项目初始化:

Vue3项目初始化:

2024/11/30 6:51:24 来源:https://blog.csdn.net/weixin_51416826/article/details/140215827  浏览:    关键词:Vue3项目初始化:

紧接着前面的文章:https://blog.csdn.net/weixin_51416826/article/details/138679863?spm=1001.2014.3001.5502

当我们生成一个Vue3项目后必须要增加一些依赖和配置,比如安装组件库、配置ESLint和Prettier、接下来咱一步步推进~

安装组件库

一般开发为了提高效率都会用一个开源组件库,这里当然少不了,至于用什么,全凭老板拍板。这里咱选用Element Plus,下面开始讲必备配置~

配置按需加载

所谓“按需”便是用啥导啥!

先安装两个插件: unplugin-vue-components 和 unplugin-auto-import 这两款 vite 插件来开启按需加载及自动导入,插件会自动解析模板中的使用到的组件,并导入组件和对应的样式文件。

npm i unplugin-vue-components -D
npm i -D unplugin-auto-import# orpnpm add -D unplugin-vue-components
pnpm add -D unplugin-auto-import

然后在 vite.config.js 文件中配置使用一下插件(如果没有使用vite,就要找Webpack.config.js文件)

// vite.config.ts
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'export default defineConfig({// ...plugins: [// ...AutoImport({resolvers: [ElementPlusResolver()],}),Components({resolvers: [ElementPlusResolver()],}),],
})
// webpack.config.js
const AutoImport = require('unplugin-auto-import/webpack')
const Components = require('unplugin-vue-components/webpack')
const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')module.exports = {// ...plugins: [AutoImport({resolvers: [ElementPlusResolver()],}),Components({resolvers: [ElementPlusResolver()],}),],
}

配置项目内组件 & API 的自动引入

在使用 Vue 的过程中,每个 script 以及 js 文件中或多或少需要引入一些像 ref、reactiveVueAPI,包括 VueRouter、Pinia 等都要引入一些 API,还有我们自己写的组件也都需要我们手动去引入使用。那既然配置了组件库自动引入,我们接下来也配置API、以及页面组件的自动引入。

还是在vite.config.js 文件中

// vite.config.ts
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'export default defineConfig({// ...plugins: [// ...AutoImport({// 需要去解析的文件include: [/\.[tj]sx?$/, // .ts, .tsx, .js, .jsx/\.vue$/,/\.vue\?vue/, // .vue/\.md$/ // .md],// imports 指定自动引入的包位置(名)imports: ['vue', 'pinia', 'vue-router'],resolvers: [ElementPlusResolver()],}),Components({// imports 指定组件所在目录,默认为 src/componentsdirs: ['src/components/', 'src/view/'],// 需要去解析的文件include: [/\.vue$/, /\.vue\?vue/, /\.md$/],resolvers: [ElementPlusResolver()],}),],
})

配置 ESLint 和 Prettier

前面的文章已经介绍了这个,请移步:

https://blog.csdn.net/weixin_51416826/article/details/139156237?spm=1001.2014.3001.5502

Pinia构建用户仓库和持久化

首先安装Pinia

pnpm add pinia-plugin-persistedstate -D

封装pinia并持久化

在src目录下创建stores文件夹,在文件夹下创建index.js文件

import { createPinia } from 'pinia'
import persist from 'pinia-plugin-persistedstate'const pinia = createPinia()
pinia.use(persist)export default pinia// 仓库统一导出
export * from './modules/user'

在stores/modules/下创建user.js

// pinia 替代 Vuex 的具体用法
import { userGetInfoService } from '@/api/user'
import { defineStore } from 'pinia'
import { ref } from 'vue'// 用户模块
export const useUserStore = defineStore('big-user',() => {const token = ref('')const user = ref({})return {token,user,}},{persist: true // 持久化}
)

main.js中引入使用

import './assets/main.css'
import { createApp } from 'vue'
import App from './App.vue'
import router from '@/router/index'
import pinia from './stores/index'const app = createApp(App)app.use(pinia)
app.use(router)app.mount('#app')

配置路由

创建src/router/index.js,同时配置拦截规则

import { createRouter, createWebHistory } from 'vue-router'
import { useUserStore } from '@/stores'const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{ path: '/login', component: () => import('@/views/login/LoginWeb.vue') },{path: '/',component: () => import('@/views/layout/LayoutPage.vue'),redirect: '/article/manage',children: [{path: '/article/manage',component: () => import('@/views/article/ArticleManage.vue')},{path: '/article/channel',component: () => import('@/views/article/ArticleChannel.vue')},{path: '/user/info',component: () => import('@/views/user/UserInfo.vue')},{path: '/user/avatar',component: () => import('@/views/user/UserAvatar.vue')},{path: '/user/password',component: () => import('@/views/user/UserPassword.vue')}]}]
})//登录访问拦截
router.beforeEach((to) => {// 如果没有token or 非登录页 拦截到登录const userStore = useUserStore()if (!userStore.token && to.path !== '/login') return '/login'return true
})
export default router

此项目大家仅供参考,照搬不可取~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com