1、初始化 Vue2 项目
1.1、初始化项目
npm init vite@latest
完成以上面步骤后,再选择以下要新建的是什么项目即可。
这里选择 vanilla
即可,随后会追问选择 原生
的还是 ts
的,根据自己需求选择即可。
我这里会选择 原生 进行开发。
项目创建成功后,会出现 3 条提示命令。
进入项目
cd vite-vue2
初始化项目
npm install
运行项目npm run dev
1.2、安装 vite 对 vue2 支持的插件
【1】要在 vite
里运行 vue2
项目,需要安装一个 vite
的插件:vite-plugin-vue2
npm install vite-plugin-vue2 --dev
【2】要使用 vite
插件,需要在项目的根目录创建 vite.config.js
文件。
在 vite.config.js
里输入以下代码。
const { createVuePlugin } = require('vite-plugin-vue2')
module.exports = {
plugins: [createVuePlugin( /*options*/ )],
}
引入 vite-plugin-vue2
插件,并用 Vite
提供的插件注册方法来注册。
需要注意,createVuePlugin()
是跟着括号的,是要执行的!
1.3、安装 vue 依赖
npm install vue -S
npm install vue-template-compiler
1.4、修改项目文件依赖关系
1.4.1、创建 src 目录
在项目根目录下创建 src
目录。
然后把 main.js
移到 src
目录里。
1.4.2、修改 index.html
项目启动后,入口文件是 index.html
,而 index.html
原本引入了 main.js
,所以也要修改一下 index.html
文件的指向。
<script type="module" src="/src/main.js"></script>
1.4.3、创建 App.vue 文件
<template>
<div>Hello Vite Vue2 from wanghy</div>
</template>
1.4.4、修改 src/main.js
import Vue from "vue";
import App from "./App.vue"
new Vue({
el: "#app",
render: (h) => h(App)
}).$mount();
1.5、运行项目
npm run dev
1.6、打包
npm run build
二、项目常用库集成
2、安装 vue-router
2.1、安装
npm install vue-router^3.2.0
在写本文时,使用以上命令安装的 vue-router
是支持 Vue3
项目的。
所以该命令安装的 vue-router
是支持 Vue2
的话,需要自行加一个版本号来约束。
2.2 新建路由目录
2.2.1、创建路由表
在 src
目录下创建 router
目录,并在 router
目录下创建 index.js
文件。
在 src/router/index.js
输入以下代码
import Vue from 'vue'
import VueRouter from 'vue-router'
import hello from '../views/hello.vue' // 引入 Home页面组件
// 注册路由插件
Vue.use(VueRouter)
//
const routes = [
{
path: '/',
name: 'hello',
component: hello
},
{
path: '/about',
name: 'About',
component: () => import('../views/About.vue')
}
]
const router = new VueRouter({
routes
})
export default router
复制代码
2.2.2、创建路由指向的页面组件
在 src
目录下创建 views
目录,用来存放页面组件。
在 src/views
目录下创建2个页面:Hello.vue
和 About.vue
Hello.vue
内容
<template>
<div>
hello world
</div>
</template>
复制代码
About.vue
内容
<template>
<div>
About
</div>
</template>
复制代码
2.3 全局注册
2.3.1、在 main.js 里注册
2.3.1、在 main.js 里注册
import Vue from 'vue'
import App from './App.vue'
import router from './router/index.js'
new Vue({
router,
render: h => h(App)
}).$mount('#app')
复制代码
引入 router
,并且在 new Vue
时注册一下。
2.3.2 创建路由跳转标签 并 展示
修改 App.vue
文件
<template>
<div>
<nav>
<router-link to="/">Hello</router-link> |
<router-link to="/about">About</router-link>
</nav>
<router-view />
</div>
</template>
复制代码
使用 <router-link>
标签定义跳转地址。
3、安装 vuex
3.1 安装
npm install vuex@^3.4.0 --save
使用以上命令安装的 vuex
是支持 Vue3
项目的。
该命令安装的 vuex
是支持 Vue2
的话,需要自行加一个版本号来约束。
3.2 新建vuex目录
在 src
目录下创建 store
目录,并在 store
目录下创建 index.js
。
在 index.js
文件输入以下代码
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
count: 0
},
getters: {
count(state) {
return state.count
}
},
mutations: {
addCount(state, num) {
state.count += num
}
},
actions: {}
})
复制代码
以上代码,在 state
里创建一个变量 count
用作计数器。
在 getters
里提供一个方法获取 count
。
在 mutations
里提供一个方法修改 count
。
3.3 全局注册
3.3.1 在 main.js 里注册
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')
复制代码
引入 store
并在 new Vue
时注册。
3.3.2 在 Home.vue 里使用
<template>
<div>
<h1>Home</h1>
<div>count: {{ count }}</div>
<button @click="addCount">+1</button>
</div>
</template>
<script>
export default {
computed: {
count() {
return this.$store.getters.count;
},
},
methods: {
addCount() {
this.$store.commit("addCount", 1);
},
},
};
</script>
4、安装 axios
4.1 安装
npm i axios --save
4.2 新建utils目录,根据业务封装Axios
在 src
目录下创建 utils
目录,并在 utils
目录下创建 request.js
。
在 request.js
文件输入以下代码
import axios from 'axios'
import store from '@/store'
import { Toast } from 'vant'
// 根据环境不同引入不同api地址
import { baseApi } from '@/config'
// create an axios instance
const service = axios.create({
baseURL: baseApi, // url = base api url + request url
withCredentials: true, // send cookies when cross-domain requests
timeout: 5000 // request timeout
})
// request拦截器 request interceptor
service.interceptors.request.use(
config => {
// 不传递默认开启loading
if (!config.hideloading) {
// loading
Toast.loading({
forbidClick: true
})
}
if (store.getters.token) {
config.headers['X-Token'] = ''
}
return config
},
error => {
// do something with request error
console.log(error) // for debug
return Promise.reject(error)
}
)
// respone拦截器
service.interceptors.response.use(
response => {
Toast.clear()
const res = response.data
if (res.status && res.status !== 200) {
// 登录超时,重新登录
if (res.status === 401) {
store.dispatch('FedLogOut').then(() => {
location.reload()
})
}
return Promise.reject(res || 'error')
} else {
return Promise.resolve(res)
}
},
error => {
Toast.clear()
console.log('err' + error) // for debug
return Promise.reject(error)
}
)
export default service
4.3 使用
在 src
目录下创建 api
目录,并在 api
目录下创建 base.js, home.js[业务请求文件,可按模块划分,根据实际情况自己决定]
。
在base.js文件里只做请求地址显示,例如
const api = {
Login: '/user/login', //后端接口路径
UserInfo: '/user/userinfo', //后端接口路径
UserName: '/user/name' //后端接口路径
}
export default api
在home.js 做对应业务处理,示例如下:
import api from './base'
// axios
import request from '@/utils/request'
// 登录
export function login(data) {
return request({
url: api.Login,
method: 'post',
data
})
}
5、安装 vant
5.1 安装
npm i vant --save
5.2 新建plugins目录,做外部组件统一处理
在 src
目录下创建 plugins
目录,并在 plugins
目录下创建 vant.js
。
在 vant.js
文件输入以下代码
// 按需全局引入 vant组件
import Vue from 'vue'
import { Button, List, Cell, Tabbar, TabbarItem } from 'vant'
Vue.use(Button)
Vue.use(Cell)
Vue.use(List)
Vue.use(Tabbar).use(TabbarItem)
5.3 全局注册
5.3.1 在 main.js 里注册
import Vue from "vue";
import App from "./App.vue"
import router from './router/index.js'
import store from './store'
// 全局引入按需引入UI库 vant
import '@/plugins/vant'
new Vue({
el: "#app",
router,
store,
render: (h) => h(App)
}).$mount();
7 小常识包安装注意事项
7.1生产依赖 dependencies
Copy
npm i package-name --save
或
npm i package-name -S
7.2开发依赖 devDependencies
npm i package-name --save-dev
或
npm i package-name -D
6、移动端屏幕适配
postcss-px-to-viewport
6.1.开发环境 npm 安装插件
npm install postcss-px-to-viewport --save-dev
6.2.项目根目录添加配置文件
根目录建postcss.config.js 配置如下:重新运行项目就可以了
module.exports = {
plugins: {
'postcss-px-to-viewport': {
unitToConvert: 'px', // 需要转换的单位,默认为"px"
viewportWidth: 375, // 设计稿的视口宽度
unitPrecision: 5, // 单位转换后保留的精度
propList: ['*'], // 能转化为vw的属性列表
viewportUnit: 'vw', // 希望使用的视口单位
fontViewportUnit: 'vw', // 字体使用的视口单位
selectorBlackList: [], // 需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位。
minPixelValue: 1, // 设置最小的转换数值,如果为1的话,只有大于1的值会被转换
mediaQuery: false, // 媒体查询里的单位是否需要转换单位
replace: true, // 是否直接更换属性值,而不添加备用属性
exclude: undefined, // 忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
include: undefined, // 如果设置了include,那将只有匹配到的文件才会被转换
landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
landscapeUnit: 'vw', // 横屏时使用的单位
landscapeWidth: 375 // 横屏时使用的视口宽度
}
}
}
7、参考
Vite 支持 Vue2 的插件:vite-plugin-vue2 文档
vite常用插件:juejin.cn/post/699374…