【完美实现】VITE + VUE3 + SVG图片解析+element-plus开发环境初始化(基于macos)

一、最终效果

废话少说,直接上效果

这是我的初始化程序提供的页面,在这个页面上实现了一下几个功能:

1、vite初始化之后的路由安装和初始化;

2、标准SVG的解析,并可调整大小、颜色;

3、element-plus的安装和使用

二、背景介绍

1、我是后端开发者,对前端一知半解,能写一些vue文件,但是vue的环境搭建总是难倒我,按照上面写的实践总是不成功,每次新开个项目都要重复经历一个痛苦的过程,于是痛定思痛搞了个脚本一劳永逸的解决vite vue基础环境的问题。

2、vue-cli的官方脚手架安装后的解释程序默认是js的,但目前网上的示例或包都是支持ts的,虽然对于前端人员明白如何协调,但是我总是搞得一团糟,于是我就果断放弃官方脚手架,而选用了vite,vite默认激活后就是ts的环境,相当于在解释器这块一劳永逸了。但是vite没有router ,这个对于前端老手而言依旧没有难度,但是对于我,还要找demo进行移植,中间各种波折,算了搞个脚本吧。

3、每次装一个包总是想先看看效果,以验证包安装正确,如果没有实现也不知道是安装过程不正确还是我在移植过程中出现了问题,总之,由于每个步骤都可能出现问题,那就都固定下来,不知道有没有新手和我的想法是一样的。

4、由于macos系统每次运行个什么命令就要加sudo,有时候命令是正确的,但是没有加sudo系统会报错,弱鸡的我以为命令错了,于是开始各种找问题,简直就是又菜还爱玩。

三、直接上代码

1、官方初始化流程

vite的初始化流程是不能放在脚本中实现的,因为有交互的过程,这块我懒得研究了,直接写在上面手动操作就好。此处可参照vite中文官网

由于我是macos 电脑,所以后面的命令都有sudo。

sudo npm init vite@latest

这一步是项目初始化会问3个简单问题,截图如下

这个没什么可说的,继续...

系统提供3条命令,进入目录,安装必须的包,运行项目,于是大家得到一个初始化页面。

这一步很简单,不赘述

2、安装基础库

这里要安装的基础库是 router 、element-plus、 svg图片解释器

1、router难度不大,只要把官方示例中的包装上,在main.ts里调用即可,另在app.vue能看到效果;

2、emement-plus难度也不大,主要是把官方的多语言识别加上,不然开发到中间发现按钮内容是英文,还要找半天,另在app.vue能看到效果;

3、也是最麻烦且必须做的,就是加载一个能用的svg图片解释器,并且能够灵活的调整大小、颜色;

#! /bin/bash# 项目初始化命令 
# sudo npm init vite@latestecho -e "\033[32m开始安装插件\033[0m"
echo -e "\033[36m如果系统提示需要管理员密码,请输入...\033[0m"# 完成路由安装及配置
echo -e "\033[36m开始安装 vue router \033[0m"
sudo npm install vue-router@next --save
echo -e "\033[32m vue router 安装完毕\033[0m"echo -e "\033[36m开始安装 svg支持包 vite-plugin-svg-icons\033[0m"
sudo npm install vite-plugin-svg-icons 
echo -e "\033[32m vite-plugin-svg-icons 安装完毕\033[0m"echo -e "\033[36m开始安装 svg支持包 fast-glob\033[0m"
sudo npm install fast-glob 
echo -e "\033[32m fast-glob 安装完毕\033[0m"echo -e "\033[36m开始安装 path 支持包 path,这个包在js麦 vue-cil会自动安装,但是在ts环境下不会,需手动\033[0m"
sudo npm install path
echo -e "\033[32m path 安装完毕\033[0m"echo -e "\033[36m开始安装 element-plus \033[0m"
sudo npm install element-plus --save
echo -e "\033[32m element-plus 安装完毕\033[0m"echo -e "\033[33m 开始修改 新建router目录并新建文件 index.ts 内容\033[0m"
sudo chmod -R 777 *
sudo rm -rf ./src/router
sudo mkdir ./src/router
sudo touch ./src/router/index.ts
sudo chmod 777 ./src/router/index.ts
sudo echo "import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
import HelloWorld from '../components/HelloWorld.vue';
const routes: Array<RouteRecordRaw> = [{path: '/',name: 'Home',component: HelloWorld},
];
const router = createRouter({history: createWebHistory(),routes
});
export default router;" >> ./src/router/index.tsecho -e "\033[33m 开始修改 app.vue内容\033[0m"
echo -e "\033[36m 这一步比较简单,只需要修改文件即可\033[0m"
sudo rm -rf ./src/App.vue
sudo touch ./src/App.vue
sudo chmod 777 ./src/App.vue
echo '<script>
import { defineComponent, computed } from "vue"import SvgIcon from "./components/SvgIcon.vue"
export default defineComponent({name: "App",components: { SvgIcon },
})
</script>
<template>
<SvgIcon name="lightning" style="width:60px;height:60px;" color="#0099cc"></SvgIcon>
<RouterView />
<div class="mb-4"><el-button>Default</el-button><el-button type="primary">Primary</el-button><el-button type="success">Success</el-button><el-button type="info">Info</el-button><el-button type="warning">Warning</el-button><el-button type="danger">Danger</el-button>
</div>
1.看到上面蓝色的闪电图标表示SVG解析完成;<br />
2.看到中间的一堆文字,表示路由生效;<br />
3.看到下面的一排按钮表示 element-plus 安装成功。
</template>' >> ./src/App.vue
echo -e "\033[32m app.vue 修改完成\033[0m"echo -e "\033[36m 另一个是在main.ts中注册并加载\033[0m"echo -e "\033[33m 开始修改 main.ts 调用\033[0m"
sudo rm -rf ./src/main.tssudo echo "import { createApp } from 'vue'
import App from './App.vue'
import router from './router'// 加载 element-plus,增加了国际化语言的设定,在使用时默认是中文
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'// 加载 svg图片解析
import 'virtual:svg-icons-register'const app= createApp(App);
app.use(router);
app.use(ElementPlus)
app.use(ElementPlus, {locale: zhCn,
})
app.mount('#app');" >> ./src/main.ts
echo -e "\033[32m main.ts 修改完成\033[0m"echo -e "\033[33m 开始修改 vue.config.ts 的内容\033[0m"
sudo rm -rf ./vite.config.ts
sudo touch ./vite.config.ts
sudo chmod 777 ./vite.config.ts
sudo echo "import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'const pathResolve = (pathStr) => path.resolve(__dirname, pathStr);// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(),createSvgIconsPlugin({iconDirs: [path.resolve(process.cwd(), 'src/icons')],symbolId: 'icon-[dir]-[name]',}),],  resolve: {alias: {'@': pathResolve('./src'),'components': pathResolve('./src/components'),'views': pathResolve('./src/views'),}},
})" >> ./vite.config.ts echo -e "\033[32mvue.config.ts 修改完毕\033[0m"echo -e "\033[33m 开始修改 components/svgIcon.vue 的内容\033[0m"
sudo rm -rf ./src/components/SvgIcon.vue
sudo touch ./src/components/SvgIcon.vue
sudo chmod 777 ./src/components/SvgIcon.vuesudo echo "<template><svg aria-hidden='true'><use :xlink:href='symbolId' :fill='color' /></svg>
</template><script>
import { defineComponent, computed } from 'vue'export default defineComponent({name: 'SvgIcon',props: {prefix: {type: String,default: 'icon',},name: {type: String,required: true,},color: {type: String,default: '#333',},},setup(props) {const symbolId = computed(() => \`#\${props.prefix}-\${props.name}\`)return { symbolId }},
})
</script>" >> ./src/components/SvgIcon.vue
echo -e "\033[32m ./src/components/SvgIcon.vue 修改完毕\033[0m"echo -e "\033[33m 开始生成svg图标\033[0m"sudo rm -rf ./src/icons
sudo mkdir ./src/icons
sudo chmod -R 777 *
sudo touch ./src/icons/lightning.svg
sudo chmod 777 ./src/icons/lightning.svg
sudo echo "<?xml version='1.0' standalone='no'?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg t='1692792506570' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='58773' xmlns:xlink='http://www.w3.org/1999/xlink' ><path d='M690.176 843.776l239.616-358.4c10.24-14.336 6.144-32.768-8.192-43.008-4.096-4.096-10.24-6.144-16.384-6.144H716.8v-225.28c0-16.384-14.336-30.72-30.72-30.72-10.24 0-20.48 6.144-24.576 14.336L421.888 552.96c-10.24 14.336-6.144 32.768 8.192 43.008 4.096 4.096 10.24 6.144 16.384 6.144H634.88v225.28c0 16.384 14.336 30.72 30.72 30.72 10.24 0 20.48-6.144 24.576-14.336z' p-id='58774'></path><path d='M204.8 231.424h204.8c34.816 0 61.44 26.624 61.44 61.44s-26.624 61.44-61.44 61.44H204.8c-34.816 0-61.44-26.624-61.44-61.44s26.624-61.44 61.44-61.44z m0 491.52h204.8c34.816 0 61.44 26.624 61.44 61.44s-26.624 61.44-61.44 61.44H204.8c-34.816 0-61.44-26.624-61.44-61.44s26.624-61.44 61.44-61.44z m-81.92-245.76h163.84c34.816 0 61.44 26.624 61.44 61.44s-26.624 61.44-61.44 61.44H122.88c-34.816 0-61.44-26.624-61.44-61.44s26.624-61.44 61.44-61.44z' opacity='.3' p-id='58775'></path></svg>" >> ./src/icons/lightning.svg
echo -e "\033[32m svg图标生成完毕\033[0m"sudo npm run dev

这个脚本我测试了上百遍,也就是出过上百个问题,参考了网上几十篇文章,在SVG的环节总是出错,不是加载报错,就是图像无显示,要不就是几个网上的示例彼此冲突,最后还是vite-plugin-svg-icons 的官网github上的事例解决了我的问题,这里告诫大家一句,虽然看官网很麻烦,但是官网的示例一般都是对的,不像很多文章,不是不写清楚,就是故意写错误,耽误了好多时间。

三、使用方法

1、在新建好一个项目后,在这个目录的根目录下,比如我的就是price_2000目录下随便建一个脚本文件,比如我的是vue_init.sh,然后将上面的内容拷贝进去,执行一次,就全搞定了,顺利的话你会看到文章顶部的截图,恭喜你一键搞定3个包的基础配置。

2、这里还可能存在几个问题,首先npm我是从官网下载,有些人可能会慢需要手动调到国内镜像,但我在安装的时候国内镜像有时也会出问题,就干脆从官网下了。

3、windows由于没有sudo命令,需要手动修改,我这里手头没有windows电脑所以没有做测试,有需要的只能手动改改了。

四、后记

2024年3月11日

这两天在使用过程中发现还有两个地方需要注意:

1、SBG内部不能填充颜色,否则调用的时候无法动态调整颜色,找个文本编辑器,把fill=#xxxxxx的部分删掉就好;

2、SvgIcon在别的vue文件中调用的时候会不显示,需要在每个vue文件里加载参数即可

import SvgIcon from "@/components/SvgIcon.vue" 

五、吐槽

1、做这个前前后后用了一个人礼拜的时间,因为我不是专职开发,另外前端的知识也很有限,所以效率是低了点,但是从一个侧面证明对于一个新手而言,想安装好svg包实在太麻烦,以前做个项目因为没法导入包,只能拿着element-plus里为数不多的图标来回用。

2、vue的官方就不考虑吧SVG图片解析功能集成进去么、现在svg图片已经成了必备的图标,每次开发都要手动导入这些,难倒是变相劝退么?如果是这样还要什么全家桶啊,都手动安装得了,反正我对这个问题也是相当的无语,此处吐槽20分钟...

3、现在包括chatGPT上的很多示例都是混在着vue2 和 vue3的代码,各个包的示例也不尽相同,这无疑提升了vue的使用门槛,这里仅针对新手,我对于vue的编写方式很是认可,但是每次上手就有一大堆基础环境要配这是高手给新手挖的坑么?

4、path包在js环境下是自动安装的,在ts环境下需手动安装,这个难倒了多少人,我怎么知道示例中的path是需要手动安装的,这么一个看起来名称如此基础的包;

5、网上很多示例能够加载svg了,但是却不告诉大家怎么调大小,怎么调颜色,这是要逼得人抓狂么?之所以吐槽这么多,也是因为这一周的时间总是在做这些翻来覆去没有意义却一直调不通的东西。

希望对大家有帮助,另外我的下一个项目,会因为这个脚本,变得简单。

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

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

相关文章

Websocket在Asp.net webApi(.net framework)上的应用

之前在写看板部分的web api的时候&#xff0c;都是通过Ajax在规定时间内轮询调用web api&#xff0c;这样简单省事&#xff0c;但是当看板多了&#xff08;并发量上来&#xff09;以后&#xff0c;比较消耗服务器的性能&#xff0c;所以最近研究了websocket&#xff0c;希望使用…

运放的基础知识

运算放大器&#xff08;Operational Amplifier&#xff0c;简称运放&#xff09;是一种直流耦合、差模&#xff08;差动模式&#xff09;输入的高增益电压放大器&#xff0c;通常具有单端输出。它能产生一个相对于输入端电势差大数十万倍的输出电势&#xff08;对地而言&#x…

Jenkins Pipeline实现Golang项目的CI/CD

Jenkins Pipeline实现Golang项目的CI/CD 背景 最近新增了一个Golang实现的项目&#xff0c;需要接入到现有的流水线架构中。 流程图 这边流程和之前我写过的一篇《基于Jenkins实现的CI/CD方案》差不多&#xff0c;不一样的是构建现在是手动触发的&#xff0c;没有配置webho…

蓝桥杯倒计时 36天-DFS练习

文章目录 飞机降落仙境诅咒小怂爱水洼串变换 飞机降落 思路&#xff1a;贪心暴搜。 #include<bits/stdc.h>using namespace std; const int N 10; int t,n; //这题 N 比较小&#xff0c;可以用暴力搜搜复杂度是 TN*N! struct plane{int t,d,l; }p[N]; bool vis[N];//用…

OceanBase中binlog service 功能的试用

OBLogProxy简介 OBLogProxy即OceanBase的增量日志代理服务&#xff0c;它可与OceanBase建立连接并读取增量日志&#xff0c;从而为下游服务提供了变更数据捕获&#xff08;CDC&#xff09;的功能。 关于OBLogProxy的详尽介绍与具体的安装指引&#xff0c;您可以参考这篇官方OB…

RocketMQ快速入门_2. rocketmq 的应用场景、与其他mq的差异

0. 引言 之前我们讲解过rabbitMQ&#xff0c;本期我们将进入吞吐量更加强大的rocketMQ的学习。 1. 基础概念 如果你是刚接触MQ的同学&#xff0c;还不清楚消息队列的基础概念的&#xff0c;可以参考我之前这篇文章&#xff1a; https://wu55555.blog.csdn.net/article/deta…

IOS降级后从高版本到低版本恢复备份

IOS降级后从高版本到低版本恢复备份 此方法只适用于小版本还原&#xff0c;比如17.4->17.3&#xff0c;未验证大版本恢复可行性手机型号&#xff1a;iphone 13pro 系统版本&#xff1a;17.4 降级版本&#xff1a;17.3.1 步骤 通过itunes或者MacOS系统下对当前版本进行备份…

C++中的STL-string类

文章目录 一、为什么学习string类&#xff1f;1.1 C语言中的字符串 二、准库中的string类2.2 string类2.3 string类的常用接口说明2.4 string类对象的容量操作2.5 string类对象的访问及遍历操作2.5 string类对象的修改操作2.7 string类非成员函数2.8 模拟实现string 一、为什么…

部署私有KMS服务器,并设置自动激活Windows和office

介绍 vlmcsd是一个KMS激活服务器的模拟器&#xff0c;可以在Windows Server之外的平台上部署自己的KMS服务器。它是一个开源项目&#xff0c;由Wind4开发&#xff0c;目前在Linux上运行&#xff08;包括Android、FreeBSD、Solaris、Minix、Mac OS、iOS和Windows等&#xff09;…

浅浅探索Memcached

一、NoSQL介绍 NoSQL是对 Not Only SQL、非传统关系型数据库的统称。 NoSQL一词诞生于1998年&#xff0c;2009年这个词汇被再次提出指非关系型、分布式、不提供ACID的数据库设计模式。 随着互联网时代的到来&#xff0c;数据爆发式增长&#xff0c;数据库技术发展日新月异&a…

【Node.js从基础到高级运用】二、搭建开发环境

Node.js入门&#xff1a;搭建开发环境 在上一篇文章中&#xff0c;我们介绍了Node.js的基础概念。现在&#xff0c;我们将进入一个更实际的阶段——搭建Node.js的开发环境。这是每个Node.js开发者旅程中的第一步。接下来&#xff0c;我们将详细讨论如何安装Node.js和npm&#…

Gitlab CICD 下载artifacts文件并用allure打开,或bat文件打开

allure命令行打开aritfacts报告 首先下载allure.zip&#xff0c;并解压 配置环境变量 使用命令行打开allure文件夹 allure open 2024-03-11-14-54-40 2024-03-11-14-54-40 包含index.html Bat文件打开artifacts There are 2 html reports in the download artifacts.zip S…

TikTok新手如何起号?环境因素与内容创新技巧

相信很多刚入行的TikTok玩家都遇到过一个难题&#xff0c;那就是账号权重低&#xff0c;播放量在个位数徘徊&#xff0c;其实都是因为还没起号&#xff01;那么具体如何起号呢&#xff1f;下面小编也给大家分享一下技巧。 一、如何起号 1、明确注册 TikTok 账号的目的 无论是…

Unity的PICO项目基础环境搭建笔记(调试与构建应用篇)

文章目录 前言一、为设备开启开发者模式1、开启PICO VR一体机。前往设置>通用>关于本机>软件版本号2、一直点击 软件版本号 &#xff0c;直到出现 开发者 选项3、进入 开发者模式&#xff0c;打开 USB调试&#xff0c;选择 文件传输 二、实时预览应用场景1、下载PC端的…

python自学7

第二章第一节面向对象 程序的格式都不一样&#xff0c;每个人填写的方式也有自己的习惯&#xff0c;比如收集个人信息&#xff0c;可能有人用字典字符串或者列表&#xff0c; 类的成员方法 类和对象 构造方法 挨个传输值太麻烦了&#xff0c;也没有方便点的&#xff0c;有&…

基于单片机的指纹采集识别系统设计

目 录 摘 要 I Abstract II 引 言 3 1 硬件选择与设计 5 1.1 总体设计及方案选择 5 1.1.1主控单片机选择 5 1.1.2传感器模块选择 6 1.1.3显示器模块选择 6 1.2 系统总体设计 7 2 系统硬件电路设计 8 2.1 系统主电路设计 8 2.1.1 主体电路设计 8 2.1.2 单片机最小系统设计 8 2.…

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像&#xff08;C&#xff09; Baumer工业相机Baumer工业相机定序器功能的技术背景Baumer工业相机通过NEOAPI SDK使用定序器功能预期的相机动作技术限制定序器的工作原理 Baumer工业相机通过NE…

【Java 并发】AbstractQueuedSynchronizer

1 AQS 简介 在同步组件的实现中, AQS 是核心部分, 同步组件的实现者通过使用 AQS 提供的模板方法实现同步组件语义。 AQS 则实现了对同步状态的管理, 以及对阻塞线程进行排队, 等待通知等一些底层的实现处理。 AQS 的核心也包括了这些方面: 同步队列, 独占式锁的获取和释放, 共…

Ps:清理

清理 Purge命令位于“编辑”菜单下&#xff0c;它主要用于释放 Photoshop 使用的内存资源&#xff0c;有助于提高系统的性能。 通过使用“清理”命令&#xff0c;用户可以有效管理 Photoshop 的资源使用&#xff0c;特别是在处理大型文件或进行长时间编辑会话时。 定期清理可以…

华为ce12800交换机m-lag(V-STP模式)配置举例

配置## 标题思路 采用如下的思路配置M-LAG双归接入IP网络&#xff1a; 1.在Switch上配置上行接口绑定在一个Eth-Trunk中。 2.分别在SwitchA和SwitchB上配置V-STP、DFS Group、peer-link和M-LAG接口。 3.分别在SwitchA和SwitchB上配置LACP M-LAG的系统优先级、系统ID。 4.分别在…