创建一个空的vite2项目

  • vite是一个构建工具,开发期它利用浏览器的native ES module(原生ES模块)特性导入组织代码,生产中利用rollup作为打包工具
  • vite特点:光速启动 热模块替换 按需编译
  1. npm init @vitejs/app project-name
  2. cd project-name
  3. npm install
  4. npm run dev

vite环境变量与模式

  • .env 全局默认配置文件,不论什么环境都会加载合并
  • .env.development 开发环境下的配置文件(可自己随意定义)
  • .env.production 生产环境下的配置文件(可自己随意定义)
  • Vite 在一个特殊的 import.meta.env 对象上暴露环境变量。这里有一些普遍适用的内建变量
  • 为了防止意外地将一些环境变量泄漏到客户端,只有以 VITE_ 为前缀的变量才会暴露给经过 vite 处理的代码。例如下面这个文件中:
  1. # 此行重要,标识环境,如果不写,会被认为 development 模式
  2. NODE_ENV=production
  3. # 只有 VITE_BASE_URL 会被暴露为 import.meta.env.VITE_BASE_URL 提供给客户端源码
  4. VITE_BASE_URL= 123
  • vue-cli必须以VUEAPP开头
  • vue-cli以process.env.VUE_APP_BASE_URL来读取变量(vite需要引入loadEnv来读取变量)

安装cross-env

  • cross-env是跨平台设置和使用环境变量的脚本。
  • 在大多数Windows命令行中在使用NODE_ENV = production设置环境变量时会报错。
  • 同样,Windows和Linux命令如何设置环境变量也有所不同。 使用cross-env可以设置在不同的平台上有相同的NODE_ENV参数。
  1. npm install cross-env --save-dev

package.json命令操作

  1. "scripts": {
  2. "dev": "cross-env NODE_ENV=development VITE_BASE_URL='192.168.230.232:0000' vite --mode development",
  3. "deva": "cross-env NODE_ENV=production VITE_BASE_URL='192.168.230.233:1111' vite --mode production",
  4. "build:prod": "vite build --mode production",
  5. "serve": "vite preview"
  6. },
  • cross-env 设置本地NODE_ENV值为development VITE_BASE_URL的值为192.168.230.232:0000
  • cross-env 设置线上NODE_ENV值为production VITE_BASE_URL的值为192.168.230.232:1111
  • cross-env 会更改全局环境变量(.env)和模式(development,production)中VITE_BASE_URL的值

查看环境变量


.env.development文件

  1. NODE_ENV = development
  2. VITE_APP_BASE_API = '/api'
  3. VITE_BASE_URL= '/development_url'

.env.production文件

  1. NODE_ENV = production
  2. VITE_APP_BASE_API = '/api'
  3. VITE_BASE_URL:'/production_url'
  • vue页面中打印的值为cross-env在package.json中设置的值

    1. import.meta.env.VITE_BASE_URL // 192.168.230.232:0000
  • vite.config.js中打印的值为cross-env在package.json中设置的值

    1. import { defineConfig ,loadEnv} from 'vite'
    2. export default ({ mode }) => {
    3. loadEnv(mode, process.cwd()).VITE_BASE_URL // 192.168.230.232:0000
    4. }

vite脚手架配置 vite.config.js

  1. import { defineConfig ,loadEnv} from 'vite'
  2. // 通过@vitejs/plugin-vue插件支持vuevue和其余框架一视同仁
  3. import vue from '@vitejs/plugin-vue'
  4. //mock服务
  5. import { viteMockServe } from 'vite-plugin-mock'
  6. import path from 'path'
  7. export default ({ mode }) => {
  8. return defineConfig({
  9. //服务
  10. server: {
  11. port:8088,//端口
  12. base:'/',//打包后的根路径
  13. silent:false,//开启控制台输出日志
  14. //跨域代理
  15. proxy: {
  16. [loadEnv(mode, process.cwd()).VITE_APP_BASE_API]: {
  17. target: loadEnv(mode, process.cwd()).VITE_BASE_URL,
  18. changeOrigin: true,
  19. rewrite:path => path.replace(/^\loadEnv(mode, process.cwd()).VITE_APP_BASE_API/,'')
  20. },
  21. '/api/':{
  22. target:'http://jsonplaceholder.typicode.com',
  23. changeOrigin:true,
  24. rewrite:path => path.replace(/^\/api/,'')
  25. },
  26. '/api_node/':{
  27. target:'http://127.0.0.1:3000',
  28. changeOrigin:true,
  29. rewrite:path => path.replace(/^\/api_node/,'')
  30. },
  31. '/step/':{
  32. target:'http://127.0.0.1:8183',
  33. changeOrigin:true,
  34. rewrite:path => path.replace(/^\/step/,'')
  35. },
  36. },
  37. },
  38. //打包构建
  39. build:{
  40. outDir: 'dist/monitor',//设置项目打包生成的文件的存储目录
  41. assetsDir:' static',//设置放置打包生成的静态资源
  42. },
  43. //插件
  44. plugins: [
  45. vue(),
  46. viteMockServe({
  47. // default
  48. mockPath: 'mock',
  49. supportTs:false,
  50. localEnabled: mode == 'development',//localEnabled控制mock开发环境是否启动。
  51. }),
  52. ]
  53. });
  54. }

使用vite-plugin-mock创建mock数据

  • vite 的数据模拟插件,是基于 vite.js 开发的。 并同时支持本地环境和生产环境。
  • 您可以在 Google Chrome 控制台中查看网络请求记录

安装vite-plugin-mock

  1. npm i mockjs -D
  2. npm i vite-plugin-mock -D
  • vite.config.js
  1. import { defineConfig ,loadEnv} from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. //mock服务
  4. import { viteMockServe } from 'vite-plugin-mock'
  5. export default ({ mode }) => {
  6. return defineConfig({
  7. //插件
  8. plugins: [
  9. vue(),
  10. viteMockServe({
  11. // default
  12. mockPath: 'mock',//静态文件根目录 如果watchFilestrue,将监视文件夹中的文件更改。 并实时同步到请求结果
  13. supportTs:false,//打开后,可以读取 ts 文件模块。 请注意,打开后将无法监视.js 文件。
  14. localEnabled: mode == 'development',//localEnabled控制mock开发环境是否启动。
  15. }),
  16. ]
  17. });
  18. }

创建mock数据及请求接口

  • mockPath为mock 则在项目根目录下创建mock目录
  • mock下创建静态数据就行 自己读取
  • mock/list.js
  1. //创建axios 服务
  2. const service = axios.create({
  3. baseURL: "api",
  4. timeout: 5000, // request timeout
  5. /* responseType: "blob",*/ //下载的时候在请求上加上responseType
  6. });
  • /api则对应axios创建服务的baseURL 跟后端接口一致即可
  1. export default [
  2. {
  3. url:'/api/fenceList',
  4. methods:"post",
  5. response:req=>{
  6. return{
  7. code:0,
  8. data:{
  9. list:[
  10. {
  11. fenceId: 'ddbe18490edc458ba20b9d0265486971',
  12. fenceName:'围栏1',
  13. fenceType: 1,
  14. state:0,
  15. vehicleSize:5,
  16. createTime:'2021-10-13 11:09:36',
  17. startTime:'2021-10-01 00:00:00',
  18. endTime:'2021-10-31 00:00:00',
  19. desp:'测试1',
  20. },
  21. {
  22. fenceId: '6720a927a4f0489190de41d9b8be1b79',
  23. fenceName:'Weilan &&*',
  24. fenceType: 3,
  25. state:1,
  26. vehicleSize:2,
  27. createTime:'2021-10-09 09:48:59',
  28. startTime:'2021-10-02 00:00:00',
  29. endTime:'2021-10-16 00:00:00',
  30. desp:'测试2',
  31. }
  32. ],
  33. pageInfo:{
  34. pageNum: 1,
  35. pageSize: 10,
  36. totalRecord: 2
  37. }
  38. }
  39. }
  40. }
  41. }
  42. ]
  • 请求请看axios二次封装
  • /api/fenceList api是baseURL api/fenceList 对应mock中list.js的接口
  1. export const pathConfig = {
  2. fence:{
  3. fenceList:'/fenceList'
  4. },
  5. }
  1. $this.$post('fence','fenceList').then(res=>{
  2. if(res.code == 0){
  3. data.tableData = res.data.list;
  4. data.pageData.total = res.data.pageInfo.totalRecord;
  5. }
  6. })

集成Element Plus

  • element3更适合教学版 Element Plus适合商业版
  • 官方地址 https://element-plus.org/#/zh-CN
  • 因为我们使用的Vue3.0,所以要使用Element-ui的话就必须要使用,Element Plus 这是一个使用vue3来编写的vue组件库,
  1. npm install element-plus --save
  • 运行以上命令先安装element-plus
  • 然后在入口文件main.js中引入相应的库
  1. import ElementPlus from 'element-plus'
  2. import 'element-plus/lib/theme-chalk/index.css'
  • 然后将ElementPlus挂载到Vue的原型上,并将主题的大小设置为 small
  1. createApp(App).use(ElementPlus,{size: 'small'}).mount('#app')

集成vue-router 4.x版本

  • Vite脚手架生成的vue项目,目前是没有集成vue-router的,没关系,自己动手丰衣足食
  • 安装vue-router
  • 一定要安装vue-router的4.x版本,要不然无法和Vue3.x搭配使用。
  1. npm install vue-router@4 --save
  • 在src文件下创建router文件 /src/router/index.js
  1. import { createRouter, createWebHashHistory } from "vue-router";
  2. const routes = [
  3. {
  4. path:"/",
  5. name:"home",
  6. component:()=>import("../views/home.vue")
  7. }
  8. ]
  9. const router = createRouter({
  10. history: createWebHashHistory(),
  11. routes
  12. });
  13. export default router;
  • 在main.js中引入并挂载router
  1. import router from "./router";
  2. createApp(App)
  3. .use(ElementPlus,{size: 'small'})
  4. .use(router)
  5. .mount('#app')
  • 简写
  1. var app = createApp(App);
  2. app.use(ElementPlus,{size: 'small'});
  3. app.use(router);
  4. app.mount('#app');
  5. //在vue原型上声明全局字段 this.Axios调用
  6. app.config.globalProperties.Axios = Axios;

vuex 4.x

  • 在src文件下创建store文件 /src/store/index.js
  1. npm i vuex@next -S
  2. import {createStore} from 'vuex';
  3. export default createStore({
  4. state: {
  5. couter: 0
  6. }
  7. });
  8. import store from "src/store";
  9. createApp(App).use(store).mount("#app");