0125-1-vue3初体验

vue3尝鲜体验

在这里插入图片描述

初始化

安装@vue/cli@next:

yarn global add @vue/cli@next
# OR
npm install -g @vue/cli@next

然后在 Vue 项目运行:

vue upgrade --next

项目目录

vue3-template
├── index.html	//	html模板
├── mock		// mock数据
│   └── user.js
├── node_modules
├── package-lock.json
├── package.json
├── plugins		// 自定义插件
│   └── vite-plugin-virtual-file.js
├── public
│   └── favicon.ico
├── README.md
├── src
│   ├── App.vue
│   ├── assets		// 资源文件
│   ├── components
│   ├── layouts		// 基本布局
│   ├── main.js		
│   ├── plugins		// 用于配置第三方插件,如element等
│   ├── router		// 路由
│   ├── store		// vuex状态管理
│   ├── styles		// 样式配置
│   ├── utils		// 工具包,如request
│   └── views		// 页面
├── .env.development// 配置环境
├── .env.production	// 配置环境
└── vite.config.js	// vite配置目录

vite创建项目:

npm init vite-app <project-name>
cd <project-name>
npm install
npm run dev

vite项目配置:

vite配置文档

vite中配置vue,vuex都需要使用插件,使用 defineConfig配置有代码提示,推荐使用,配置。resolve/alias 配置别名。

import vueJsx from '@vitejs/plugin-vue-jsx'
import vue from '@vitejs/plugin-vue'
import { defineConfig } from 'vite'
export default defineConfig({resolve:{alias: {'@': path.resolve(__dirname, 'src'),'comp': path.resolve(__dirname, 'src/components'),'views': path.resolve(__dirname, 'src/views'),'styles': path.resolve(__dirname, 'src/styles'),'plugins': path.resolve(__dirname, 'src/plugins'),'layouts': path.resolve(__dirname, 'src/layouts'),'utils': path.resolve(__dirname, 'src/utils'),}},plugins: [vue(),vueJsx(),viteMockServe({mockPath: 'mock',supportTs: false,})]
})

配置路由

npm install vue-router@4

router/index.js:

​ 配置Layout为基本的布局页

import { createRouter,createWebHashHistory} from 'vue-router';
import Layout from 'layouts/index.vue'
const router = createRouter({history: createWebHashHistory(),routes: [{ path:'/',component:Layout,children:[{path:"/", component: () => import('views/home.vue') }]}]
})
export default router

配置状态管理

npm install vuex@next --save

store/index.js

import { createStore } from 'vuex';const store = createStore({state () {return {count: 0}},mutations: {add (state) {state.count++}}})
export default store

配置样式文件

vite中可以直接导入.css文件,样式将影响导入的页面,最终会被打包到style.css

配置Sass

npm install sass

配置Postcss

npm i postcss autoprefixer
# vite.config.js
# 添加autoprefixer
import autoprefixer from 'autoprefixer';export default defineConfig({plugins: [autoprefixer()]
})

Scoped CSS

<style scoped>
/**/
</style>

CSS Module

<style module>
/**/
</style>

资源处理

我们可以在*.vue 文件的template, style和纯.css文件中以相对和绝对路径方式引用静态资源。

<!-- 相对路径 -->
<img src="./assets/logo.png">
<!-- 绝对路径 -->
<img src="/src/assets/logo.png"><style scoped>
#app {background-image: url('./assets/logo.png');
}
</style>

public目录

public 目录下可以存放未在源码中引用的资源,它们会被留下且文件名不会有哈希处理。

这些文件会被原封不动拷贝到发布目录的根目录下

<img src="/logo.png">

引入Element3

生产环境中按需引入,开发环境直接引入所有的包

src/ plugins/element3.js

// import Element3 from 'element3'; 
// import 'element3/lib/theme-chalk/index.css';
import {ElButton, ElRow, ElCol, } from 'element3'
import 'element3/lib/theme-chalk/button.css';
import 'element3/lib/theme-chalk/row.css';
import 'element3/lib/theme-chalk/col.css';
export default function (app) {
// app.use(Element3)app.use(ElButton).use(ElRow).use(ElCol)
}

main.js

import { createApp } from 'vue'
import Element3 from 'plugins/element3';createApp(App).use(Element3)

配置环境

npm install cross-env -D

在.env.development 或者 .env.production中配置相应环境

# 例如:
VITE_BASE_API=/api

package.json

# cross-env NODE_ENV=development 配置dev运行环境
{"scripts": {"dev": "cross-env NODE_ENV=development vite","build": "vite build","serve": "vite preview"},
}

配置请求

npm install axios

utils/request.js

import axios from 'axios';
import { Message, Msgbox } from 'element3';
import store from '@/store';
const service = axios.create({baseURL: import.meta.env.VITE_BASE_API,timeout: 5000,
})
service.interceptors.request.use((config) => {config.headers['X-token'] = 'my token';console.log("Aaa")return config;
}, (error) => {console.log(error);return Promise.reject(error);
})  service.interceptors.response.use((response) => {const res = response.data;if(res.code !== 20000) {Message.error({message: res.message || 'Error',duration: 5 * 1000,})if(res.code === 50008 || res.code === 50012 || res.code === 50014) {Msgbox.confirm('您已登出,请重新登录', '确定', {confirmButtonText: '重新登录',cancelButtonText: '取消',type: 'warning',}).then(()=> {store.dispatch('user/resetToken').then(()=> {location.reload();})})}return Promise.reject(new Error(res.message || 'Error'));} else {return res;}
}, (error) => {console.log(error);Message.error({message: res.message || 'Error',duration: 5 * 1000,});return Promise.reject(error);
})  
export default service;

打包和部署

使用github actions持续集成,当push时打包上传

.github/workflows/publish.yml

name: 打包上传on: push: branches:- masterjobs:build:runs-on: ubuntu-lateststeps:- name: 迁出代码uses: actions/checkout@master- name: 安装node.jsuses: actions/setup-node@v1with: node-version: 14.0.0- name: 安装依赖run: npm install- name: 打包run: npm run build- name: 上传到服务器uses: easingthemes/ssh-deploy@v2.1.5env: SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}ARGS: "-rltgoDzvO --delete"SOURCE: "dist/"REMOTE_HOST: ${{ secrets.REMOTE_HOST }}REMOTE_USER: ${{ secrets.REMOTE_USER }}TARGET: ${{ secrets.REMOTE_TARGET }}

在github项目的action中配置secret

REMOTE_HOST : 服务器ip

SERVER_SSH_KEY:本地私钥

REMOTE_USER: 服务器登录用户

REMOTE_TARGET:放置服务器哪个目录

SOURCE: 将哪个目录放置服务器中(此处打包后是生成dist目录)

服务器配置:

编辑 /etc/ssh/sshd_config 文件,开启服务器允许通过秘钥登录

PubkeyAuthentication yes

注意:使用root账号登录服务器时开启

PermitRootLogin yes

重启 ssh 服务器

service sshd restart

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt学习:QListWidget控件+自定义条目项+双击删除+单击获取

目录 图片 头函数 接口 显示案例 方法1 方法2 方法3 方法4 自定义 方法5 在方法4上实现 图片 头函数 #include <QListWidgetItem> 接口 //不怎么常用void addItem(const QString &label)void addItems(const QStringList &labels) //自定义条目项…

Redis客户端之Redisson(二)Redisson分布式锁

一、原理&#xff1a; Redisson并没有通过setNx命令来实现加锁&#xff0c;而是基于 Redis 看⻔狗机制&#xff0c;自己实现了一套分布式锁逻辑。 1、加锁机制&#xff1a; 二、使用方法&#xff1a;

EasyExcel实现下载模板

实体类&#xff1a; package com.aicut.monitor.domain;import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.s…

YOLOv8全网独家首发:Powerful-IoU更好、更快的收敛IoU | 2024年最新IoU

💡💡💡本文独家改进:Powerful-IoU更好、更快的收敛IoU,是一种结合了目标尺寸自适应惩罚因子和基于锚框质量的梯度调节函数的损失函数 💡💡💡MS COCO和PASCAL VOC数据集实现涨点 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.htm…

【新课上架】安装部署系列Ⅲ—Oracle 19c Data Guard部署之两节点RAC部署实战

01 课程介绍 Oracle Real Application Clusters (RAC) 是一种跨多个节点分布数据库的企业级解决方案。它使组织能够通过实现容错和负载平衡来提高可用性和可扩展性&#xff0c;同时提高性能。本课程基于当前主流版本Oracle 19cOEL7.9解析如何搭建2节点RAC对1节点单机的DATA GU…

数学知识第一期 质数

前言 本文是关于质数的一些内容&#xff0c;希望能够对大家有帮助&#xff01;&#xff01;&#xff01; 一、质数的基本内容 定义&#xff1a; 质数又称素数。一个大于1的自然数&#xff0c;除了1和它自身外&#xff0c;不能被其他自然数整除的数叫做质数&#xff1b;否则…

Go Zero微服务个人探究之路(十)实战走通微服务前台请求调用的一套流程model->rpc微服务->apiHTTP调用

前言 Go语言凭借低占用&#xff0c;高并发等优秀特性成为后台编程语言的新星&#xff0c;GoZero框架由七牛云技术副总裁团队编写&#xff0c;目前已经成为Go微服务框架里star数量最多的框架 本文记录讲述笔者一步步走通前台向后台发出请求&#xff0c;后台api调用rpc服务的相…

VR数字展厅,平面静态跨越到3D立体化时代

近些年&#xff0c;VR的概念被越来越多的人提起&#xff0c;较为常见的形式就是VR数字展厅。VR数字展厅的出现&#xff0c;让各地以及各行业的展厅展馆的呈现和宣传都发生了很大的改变和革新&#xff0c;同时也意味着展览传播的方式不再局限于原来的图文、视频&#xff0c;而是…

【Redis】list以及他的应用场景

介绍 &#xff1a;list 即是 链表。链表是一种非常常见的数据结构&#xff0c;特点是易于数据元素的插入和删除并且且可以灵活调整链表长度&#xff0c;但是链表的随机访问困难。许多高级编程语言都内置了链表的实现比如 Java 中的 LinkedList&#xff0c;但是 C 语言并没有实现…

Spring Boot如何统计一个Bean中方法的调用次数

目录 实现思路 前置条件 实现步骤 首先我们先自定义一个注解 接下来定义一个切面 需要统计方法上使用该注解 测试 实现思路 通过AOP即可实现&#xff0c;通过AOP对Bean进行代理&#xff0c;在每次执行方法前或者后进行几次计数统计。这个主要就是考虑好如何避免并发情况…

JavaScript Proxy 对象、eval函数详解

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ 目录 ✨ 前言 ✨ 正文 Proxy 什么是 Proxy 代理 handlers get 捕获器 se…

Oracle ORA-09925

Error : 30: Read-only file system 造成这个问题的原因大多数是因为非正常关机后导致文件系统受损引起的&#xff0c;在系统重启之后&#xff0c;受损分区就会被Linux自动挂载为只读。 解决办法之一&#xff1a; 重启系统

聚观早报 | 特斯拉公布2023年财报;五菱红1号电池正式发布

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 1月26日消息 特斯拉公布2023年财报 五菱红1号电池正式发布 Redmi Note 13 Pro新春版开售 三星Galaxy S24系列发布…

HCIA——29HTTP、万维网、HTML、PPP、ICMP;万维网的工作过程;HTTP 的特点HTTP 的报文结构的选择、解答

学习目标&#xff1a; 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议&#xff0c;了解典型网络设备的组成和特点&#xff0c;理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

在windows上用python版tensorrt推理

文章目录 尝试一&#xff1a;利用torch导出的pth文件&#xff0c;调用torch2trt来进行trt推理1.1 搭建环境1.2 如何trt推理1.3 遇到的问题 尝试二&#xff1a;把onnx模型转为sim版的onnx模型2.1 搭建onnxim环境2.2 使用 onnxsim 尝试三&#xff1a;把onnx-sim转到trt&#xff0…

Python之代码覆盖率框架coverage使用介绍

Python代码覆盖率工具coverage.py其实是一个第三方的包&#xff0c;同时支持Python2和Python3版本。 安装也非常简单&#xff0c;直接运行&#xff1a; pip install coverage 安装完成后&#xff0c;会在Python环境下的\Scripts下看到coverage.exe&#xff1b; 首先我们编写…

【LIBS】交叉编译TCPDUMP

目录 1. 安装编译工具2. 设置环境变量3. 编译libpcap3.1 安装依赖3.2 交叉编译 4. 编译TCPDUMP4.1 克隆仓库与生成构建环境4.2 静态链接LIBPCAP4.3 动态链接LIBPCAP4.4 构建与安装 5. 查看交叉编译结果5.1 文件布局 1. 安装编译工具 sudo apt-get install -y autoconf automak…

架构篇25:高可用存储架构-双机架构

文章目录 主备复制主从复制双机切换主主复制小结存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用,其复杂性主要体现在如何应对复制延迟和中断导致的数据不一致问题。因此,对任何一个高可用存储方案,我们需要从以下几个方面去进行思考…

爬取第一试卷网高三数学试卷并下载到本地

import requests import re import os filename 试卷\\ if not os.path.exists(filename):os.mkdir(filename) url https://www.shijuan1.com/a/sjsxg3/list_727_1.html headers {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.…

第二百八十七回

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取文件类型"相关的内容&#xff0c;本章回中将介绍如何播放视频.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用…