VITE2创建VUE2
vite提供了对应的npm命令可以创建各种框架的项目,但是vite在创建vue项目时,默认直接创建vue3,因此这里我们使用原生项目进行创建。
1、初始化项目
vite提供了对应的npm命令可以创建各种框架的项目,但是vite在创建vue项目时,默认直接创建vue3,因此这里我们使用原生项目进行创建
1.1 创建项目
注意:这里vite的版本采用2.8.0的,最新的版本创建后续会出现问题
npm init vite@2.8.0
后续,安装如图
创建好项目后依次运行以下命令
// 1.进入项目 cd vite-vue2 // 2.安装依赖 npm install // 3.启动项目 npm run dev
访问效果如下
1.2 安装vite对vue2支持的插件
在vite-vue2安装:vite-plugin-vue2
// 注意:vite-plugin-vue2的版本为1.9.3 npm install vite-plugin-vue2@1.9.3 -D
在根目录创建vite.config.js文件,来注册插件
import { defineConfig } from 'vite' // 动态配置函数 import { createVuePlugin } from 'vite-plugin-vue2' import { resolve } from 'path' export default () => defineConfig({ plugins: [createVuePlugin()], server: { open: true, //自动打开浏览器 port: 1567 //端口号 }, resolve: { // 别名 alias: [ { find: '@', replacement: '/src' } ] } })
1.3 安装vue依赖
npm命令安装
npm install vue@2.x vue-template-compiler@2.x -S
1.4 修改项目文件结构
1.4.1 创建src目录
在项目根目录下创建src目录,然后修改main.js并将其移入src目录里
import Vue from 'vue' import App from './App.vue' new Vue({ render: h => h(App) }).$mount('#app')
1.4.2 修改index.html
修改项目启动的入口文件
// index.html <script type="module" src="/src/main.js"></script>
1.4.3 src目录下创建App.vue文件
代码如下:
<template> <div>Hello Vite Vue2</div> </template>
1.5 运行一下项目
再次运行下项目检验一下之前配置有无问题
npm run dev
2、vue-router
2.1 安装
npm install vue-router@3.5.2 -S
2.2 新建router目录
2.2.1 创建路由表
在src目录下创建router目录,并在router目录下创建index.js文件和module目录,在module目录下创建home.js和index.js。这里采用分模块来存放路由表
// /src/router下index.js import { module } from './module/index' import VueRouter from 'vue-router' import Vue from 'vue' // 使用VueRouter Vue.use(VueRouter) const routes = [ ...module ] const router = new VueRouter({ mode: 'history', base: '/', routes }) export default router
// /src/router/module/home.js export const home = [ { path: '/home', meta: { title: '首页' }, component: () => import('@/views/home/Index.vue') } ]
// /src/router/module/index.js import { home } from './home' export const module = [...home]
2.2.2 创建路由指向的页面组件
在 src 目录下创建 views 目录,用来存放页面组件。
在 src/views/home 目录下创建1个页面:Index.vue
<template> <div> Home </div> </template> <script> export default { name: "Index.vue" } </script> <style scoped> </style>
2.3 全局注册
2.3.1 在main.js里注册
import Vue from 'vue' import App from './App.vue' import router from './router/index.js'//引入router路由 new Vue({ router,//注册router路由 render: h => h(App) }).$mount('#app')
2.3.2 创建路由跳转标签
修改App.vue文件
<template> <div id="app" class="app"> <router-view></router-view> </div> </template>
3、vuex(可选)
vuex作为大型单页面的状态管理器,使用起来十分方便,在有mapState、mapMutation等语法糖的引入变得更加的简单,但当项目比较小的时候可以不引入,可能会变得臃肿起来,这里为了学习就引入进来了~
3.1 安装
npm install vuex@3.6.2 -S
3.2 新建vuex目录
在src目录下创建store目录,并在store目录下创建index.js
// index.js import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) // 使用Vuex export default new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++ } }, actions: {}, modules: {} })
3.3 全局注册
import Vue from 'vue' import App from './App.vue' import router from './router/index.js' import store from './store' new Vue({ router, store, render: h => h(App) }).$mount('#app')
4、组件库
这里组件库我采用了element-ui,注意不是plus版本plus版本是Vue3的
引入方式参考官方文档
4.1 安装
npm i element-ui -S
4.2 完整引入
在 main.js 中写入以下内容:
import Vue from 'vue' import ElementUI from 'element-ui';//引入ElementUI组件库 import 'element-ui/lib/theme-chalk/index.css';//引入ElementUI样式 import App from './App.vue' import router from './router/index.js'//引入router路由 Vue.use(ElementUI);//注册ElementUI new Vue({ router,//注册router路由 render: h => h(App) }).$mount('#app')
4.3 按需引入参考文档操作
Element - The world's most popular Vue UI framework
5、axios
5.1 安装
npm install axios -S
5.2 封装axios
在src创建http目录,在其下面创建request.js和home.js
// request.js import axios from 'axios' import {Message, Loading} from 'element-ui'; //创建loading实列 let loadingInstance = undefined // 创建axios实例 // 创建请求时可以用的配置选项 // 配后端数据的接收方式application/json;charset=UTF-8或者application/x-www-form-urlencoded;charset=UTF-8 const contentType = 'application/json;charset=UTF-8' const apiUrl = 'http://ip:port/XXXAPI' const instance = axios.create({ /** * 是否携带cookie,注意若携带cookie后端必须配置 * 1.Access-Control-Allow-Origin为单一域名(具体到IP + port,用localhost貌似不行) * 2.需要带上响应头Access-Control-Allow-Credentials */ // withCredentials: true, timeout: 60000, baseURL: apiUrl, headers: { 'Content-Type': contentType } }) // axios的全局配置 instance.defaults.headers.post = { 'Content-Type': 'application/x-www-form-urlencoded' } instance.defaults.headers.common = { 'X-Requested-With': 'XMLHttpRequest', } //instance.defaults.headers['Access-Control-Allow-Origin']='*' // 添加请求拦截器(post只能接受字符串类型数据) instance.interceptors.request.use( config => { if(config.loading === undefined || config.loading === true){ loadingInstance = Loading.service({ lock: true, text: '接口请求中...', background: 'rgb(0 120 212 / 28%)' }) } return config }, error => { if (loadingInstance) { loadingInstance.close() } return Promise.reject(error) } ) const errorHandle = (status, other) => { switch (status) { case 400: Message.error('信息校验失败') break case 401: Message.error('认证失败') break case 403: Message.error('token校验失败') break case 404: Message.error('请求的资源不存在') break default: Message.error(other) break } } // 添加响应拦截器 instance.interceptors.response.use( // 响应包含以下信息data,status,statusText,headers,config res => { // 请求通用处理 if (loadingInstance) { loadingInstance.close() } return res.data }, err => { if (loadingInstance) { loadingInstance.close() } // Message.error(err) const {response} = err if (response) { errorHandle(response.status, response.data) return Promise.reject(response) } Message.error('请求失败') return true } ) export default instance
import request from './request' export default { getList(model) { return request({ url: '/theme/list', method: 'post', data: model }) }, }
5.3 在页面中使用
<script> import $http from '@/http/home.js' export default { mounted() { }, methods: { async onSubmit(){ const res = await $http.getList({}); console.log(res) } } } </script>
更多推荐
所有评论(0)