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.rhkb.cn/news/245362.html

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

相关文章

【技术分享】Ubuntu 20.04如何更改用户名

产品简介 本文适用于所有RK3568/RK3588平台产品在Ubuntu 20.04系统上如何更改用户名&#xff0c;本文以IDO-EVB3588开发板为例&#xff0c;在ubuntu20.04系统上修改用户名industio为usernew。 IDO-EVB3588开发板是一款基于RK3588平台的产品。该开发板集成了四核Cortex-A76和四…

2023年CSDN年底总结-独立开源创作者第一年

2023年最大的变化&#xff0c;就是出来创业&#xff0c;当独立开源创作者&#xff0c;这一年发起SolidUI开源项目&#xff0c;把知乎重新开始运营起来。CSDN粉丝破万&#xff0c;CSDN博客专家和AI领域创作者。 2023年年度关键词&#xff1a;创业 https://github.com/CloudOrc…

【pdf技巧】pdf无法编辑的原因是什么?如何编辑pdf?

打开PDF文件之后发现没有办法编辑PDF文件&#xff0c;都有哪些原因呢&#xff1f; 首先我们可以考虑一下&#xff0c;PDF文件中的内容是否是图片&#xff0c;如果确认是图片文件&#xff0c;那么我们想要编辑&#xff0c;就可以先使用PDF编辑器中的OCR扫描功能&#xff0c;将图…

uniapp 解决键盘弹出页面内容挤压问题

page.json 配置 加 “app-plus”: { “softinputMode”: “adjustResize” } {"path": "pages/jxx/xx","style": {"navigationBarTitleText": "贺卡DIY","enablePullDownRefresh": false,"app-plus": {…

科技发展趋势,墨水屏电子桌牌将发挥更重要作用

随着科技的不断发展&#xff0c;电子桌牌作为信息展示和宣传的新型设备&#xff0c;逐渐在各个行业得到广泛应用。在国企单位、政府部门、大企业、外企等&#xff0c;墨水屏电子桌牌作为一种新型的数字化展示工具&#xff0c;也已经得到了越来越多的应用。下面&#xff0c;中科…

抖音VR直播:沉浸式体验一键打通360度精彩

随着5G技术的发展&#xff0c;VR直播近年来也逐步进入到大众的视野中&#xff0c;相比于传统直播&#xff0c;VR直播能够提供更加丰富的内容和多样化的互动方式&#xff0c;让观众更有沉浸感和参与感。现如今&#xff0c;抖音平台也上线了VR直播&#xff0c;凭借沉浸式体验和有…

视频尺寸魔方:分层遮掩3D扩散模型在视频尺寸延展的应用

▐ 摘要 视频延展(Video Outpainting)是对视频的边界进行扩展的任务。与图像延展不同&#xff0c;视频延展需要考虑到填充区域的时序一致性&#xff0c;这使得问题更具挑战性。在本文中&#xff0c;我们介绍了一个新颖的基于扩散模型的视频尺寸延展方法——分层遮掩3D扩散模型(…

Linux shell编程学习笔记42:hdparm命令

ChatGPT 和文心一言哪个更好用&#xff1f; 从智能回复、语言准确性、知识库丰富度等方面比较&#xff0c;两大AI助手哪个更胜一筹&#xff1f;快来和我们分享一下你的看法吧~ 0 前言 获取硬盘序列号是信息资产管理和信息安全检测中经常要收集的信息&#xff0c;对于Linux来说…

SpringBoot_基础

学习目标 基于SpringBoot框架的程序开发步骤 熟练使用SpringBoot配置信息修改服务器配置 基于SpringBoot的完成SSM整合项目开发 一、SpringBoot简介 1. 入门案例 问题导入 SpringMVC的HelloWord程序大家还记得吗&#xff1f; SpringBoot是由Pivotal团队提供的全新框架&…

arcgis 面要素shp数据处理

面要素是工作中用到最多的&#xff0c;那么面要素是如何形成的呢&#xff0c;主要还是由闭合的线要素转换而成。在面要素数据中常用的有以下几点&#xff1a; 一、 线转面&#xff08;要素转面&#xff09; 通过上一篇得到了点转线的要素&#xff0c;那么根据上节的线要素&am…

【操作系统基础】【CPU访存原理】:寄存 缓存 内存 外存、内存空间分区、虚拟地址转换、虚拟地址的映射

存储器怎么存储数据、内存空间分区、虚拟地址转换 计算机的存储器&#xff1a;寄存 缓存 内存 外存&#xff08;按功能划分&#xff09; 计算机的处理器需要一个存储器来存储大量的指令和数据以便自己不断取指执行和访问数据。 内存&#xff08;内存就是运行内存&#xff0c…

GitLab入门指南:上传与下载操作一网打尽

GitLab简介&#xff1a; GitLab是一个基于Git的开源仓库管理系统&#xff0c;提供了一个Web界面的Git存储库管理器&#xff0c;并集成了多种开发工具的功能&#xff0c;如代码审查、问题跟踪、持续集成和持续部署等。GitLab可以在本地服务器上部署&#xff0c;也可以使用其提供…

EXCEL VBA调用adobe的api识别电子PDF发票里内容并登记台账

EXCEL VBA调用adobe的api识别电子PDF发票里内容并登记台账 代码如下 使用须知&#xff1a; 1、工具--引用里勾选[Adobe Acrobat 10.0 Type Library] 2、安装Adobe Acrobat pro软件Dim sht As Worksheet Function BrowseFolders() As String 浏览目录Dim objshell As ObjectDim…

Unity之动画和角色控制

目录 &#x1f4d5; 一、动画 1.创建最简单的动画 2.动画控制器 &#x1f4d5;二、把动画和角色控制相结合 &#x1f4d5;三、实现实例 3.1 鼠标控制角色视角旋转 3.2 拖尾效果 &#x1f4d5;四、混合动画 最近学到动画了&#xff0c;顺便把之前创建的地形&#xff0…

服务器运维小技巧(二)——如何进行监控告警

服务器运维难度高的原因&#xff0c;很大程度是因为服务器一旦出现问题&#xff0c;生产环境的业务就会受到严重影响&#xff0c;极有可能带来难以承担的后果。因此这份工作要求工程师保持高要求的服务质量&#xff0c;能够快速响应问题&#xff0c;及时解决问题。 但是“及时…

【数据结构】 双链表的基本操作 (C语言版)

目录 一、双链表 1、双链表的定义&#xff1a; 2、双链表表的优缺点&#xff1a; 二、双链表的基本操作算法&#xff08;C语言&#xff09; 1、宏定义 2、创建结构体 3、双链表的初始化 4、双链表表插入 5、双链表的查找 6、双链表的取值 7、求双链表长度 8、双链表…

【视频媒体】深入了解直播视频流

深入了解直播视频流&#x1f3a5; YouTube、TikTok live和Twitch上的直播视频是如何工作的&#xff1f; 直播视频流与常规流媒体不同&#xff0c;因为视频内容通过互联网近乎实时发送&#xff0c;通常只有几秒钟的延迟。 下图解释了实现这一目标背后所发生的事情。 步骤1&…

Numpy入门

Numpy入门 前言1. Numpy介绍2. Numpy中的array3. Numpy怎么对数组按照索引进行查询5. Numpy常用的random随机函数6. Numpy的数学统计函数7. Numpy计算数组中满足条件元素的个数8. Numpy怎样给数组增加一个维度&#xff08;转置&#xff09;9. Numpy非常重要的数据合并操作10. N…

[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

k8s图形化管理工具之rancher

前言 在前面的k8s基础学习中&#xff0c;我们学习了各种资源的搭配运用&#xff0c;以及命令行&#xff0c;声明式文件创建。这些都是为了k8s管理员体会k8s的框架&#xff0c;内容基础。在真正的生产环境中&#xff0c;大部分的公司还是会选用图形化管理工具来管理k8s集群&…