前端框架搭建(四)改造导入项目插件流程【vite】

news2024/11/27 2:48:50

1.改造为函数

默认模板创建的vite.config.ts文件是这样的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-de7n3OoX-1670997988868)(assets/image-20221214132741-lbgi0ky.png)]

我们在上一节也提到过,这样将使得vite的一些配置十分杂乱,无法统一进行管理,因此我们可以将其函数化

export default defineConfig(configEnv => {
  const viteEnv = loadEnv(configEnv.mode , process.cwd()) as unknown as ImportMetaEnv

  return{
    
  }
})

2.创建build文件夹——用于配置vite

  • config——用于配置vite相关(包括网络代理等)
  • plugins——项目有关插件
  • utils——与项目build配置相关工具

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ym9jTyvL-1670997988869)(assets/image-20221214133620-769qu7o.png)]

每个小模块都由对应的index.ts管理

最大级的index

export * from './plugins';
export * from './config';
export * from './utils';

utils-index

获取相关路由

import path from 'path';

/**
 * 获取项目根路径
 * @descrition 末尾不带斜杠
 */
export function getRootPath() {
  return path.resolve(process.cwd());
}

/**
 * 获取项目src路径
 * @param srcName - src目录名称(默认: "src")
 * @descrition 末尾不带斜杠
 */
export function getSrcPath(srcName = 'src') {
  const rootPath = getRootPath();

  return `${rootPath}/${srcName}`;
}

3.完成插件配置

build -> plugins目录下创建unplugin.ts文件,用于插件的解析

根据报错安装对应的依赖即可

  • 自动生成component.d.ts
  • 自动下载icon
  • 解析本地icon-svg
import Icons from 'unplugin-icons/vite';
import IconsResolver from 'unplugin-icons/resolver';
import Components from 'unplugin-vue-components/vite';
import { NaiveUiResolver } from 'unplugin-vue-components/resolvers';
import { FileSystemIconLoader } from 'unplugin-icons/loaders';
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
import { getSrcPath } from '../utils';

export default function unplugin(viteEnv: ImportMetaEnv) {
  const { VITE_ICON_PREFFIX, VITE_ICON_LOCAL_PREFFIX } = viteEnv;

  const srcPath = getSrcPath();
  const localIconPath = `${srcPath}/assets/svg-icon`;

  /** 本地svg图标集合名称 */
  const collectionName = VITE_ICON_LOCAL_PREFFIX.replace(`${VITE_ICON_PREFFIX}-`, '');

  return [
    Icons({
      compiler: 'vue3',
      customCollections: {
        [collectionName]: FileSystemIconLoader(localIconPath)
      },
      scale: 1,
      defaultClass: 'inline-block'
    }),
    Components({
      dts: 'src/typings/components.d.ts',
      types: [{ from: 'vue-router', names: ['RouterLink', 'RouterView'] }],
      resolvers: [
        NaiveUiResolver(),
        IconsResolver({ customCollections: [collectionName], componentPrefix: VITE_ICON_PREFFIX })
      ]
    }),
    createSvgIconsPlugin({
      iconDirs: [localIconPath],
      symbolId: `${VITE_ICON_LOCAL_PREFFIX}-[dir]-[name]`,
      inject: 'body-last',
      customDomId: '__SVG_ICON_LOCAL__'
    })
  ];
}

plugins-index

导入插件

import type { PluginOption } from 'vite';
import vue from '@vitejs/plugin-vue';
import unocss from '@unocss/vite';
import unplugin from './unplugin';

/**
 * vite插件
 * @param viteEnv - 环境变量配置
 */
export function setupVitePlugins(viteEnv: ImportMetaEnv): (PluginOption | PluginOption[])[] {
    const plugins = [vue(),...unplugin(viteEnv), unocss()];
  
  
    return plugins;
  }
  

创建env文件

在根目录创建env文件,设置vite环境变量

VITE_BASE_URL=/

VITE_APP_NAME=Job-Collect

VITE_APP_TITLE=作业管理系统

# iconify图标作为组件的前缀
VITE_ICON_PREFFIX=icon

# 本地SVG图标作为组件的前缀, 请注意一定要包含 VITE_ICON_PREFFIX
# 格式 {VITE_ICON_PREFFIX}-{本地图标集合名称}
VITE_ICON_LOCAL_PREFFIX=icon-local

4.完成vite.config.ts构建

import { defineConfig, loadEnv } from 'vite'
import { getRootPath, getSrcPath, setupVitePlugins } from './src/build';

export default defineConfig(configEnv => {
  const viteEnv = loadEnv(configEnv.mode , process.cwd()) as unknown as ImportMetaEnv
  const rootPath = getRootPath();
  const srcPath = getSrcPath();
  return{
    base: viteEnv.VITE_BASE_URL,
    resolve: {
      alias: {
        '~': rootPath,
        '@': srcPath,
      }
    },
    plugins: setupVitePlugins(viteEnv),
    server: {
      host: '0.0.0.0',
      port: 3200,
      open: true,
    },
  }
})
// // https://vitejs.dev/config/
// export default defineConfig({
//   plugins: [
//     vue(),
//     Unocss({ // 使用Unocss
//       presets: [
//         presetUno(),
//         presetAttributify(),
//         presetIcons()],
//     })
//   ],
// })

5.创建uno.config.ts

import { defineConfig } from '@unocss/vite';
import presetUno from '@unocss/preset-uno';

export default defineConfig({
  exclude: ['node_modules', 'dist', '.git', '.husky', '.vscode', 'public', 'build', 'mock', './stats.html'],
  presets: [presetUno({ dark: 'class' })],
  shortcuts: {
    'wh-full': 'w-full h-full',
    'flex-center': 'flex justify-center items-center',
    'flex-col-center': 'flex-center flex-col',
    'flex-x-center': 'flex justify-center',
    'flex-y-center': 'flex items-center',
    'i-flex-center': 'inline-flex justify-center items-center',
    'i-flex-x-center': 'inline-flex justify-center',
    'i-flex-y-center': 'inline-flex items-center',
    'flex-col': 'flex flex-col',
    'flex-col-stretch': 'flex-col items-stretch',
    'i-flex-col': 'inline-flex flex-col',
    'i-flex-col-stretch': 'i-flex-col items-stretch',
    'flex-1-hidden': 'flex-1 overflow-hidden',
    'absolute-lt': 'absolute left-0 top-0',
    'absolute-lb': 'absolute left-0 bottom-0',
    'absolute-rt': 'absolute right-0 top-0',
    'absolute-rb': 'absolute right-0 bottom-0',
    'absolute-tl': 'absolute-lt',
    'absolute-tr': 'absolute-rt',
    'absolute-bl': 'absolute-lb',
    'absolute-br': 'absolute-rb',
    'absolute-center': 'absolute-lt flex-center wh-full',
    'fixed-lt': 'fixed left-0 top-0',
    'fixed-lb': 'fixed left-0 bottom-0',
    'fixed-rt': 'fixed right-0 top-0',
    'fixed-rb': 'fixed right-0 bottom-0',
    'fixed-tl': 'fixed-lt',
    'fixed-tr': 'fixed-rt',
    'fixed-bl': 'fixed-lb',
    'fixed-br': 'fixed-rb',
    'fixed-center': 'fixed-lt flex-center wh-full',
    'nowrap-hidden': 'whitespace-nowrap overflow-hidden',
    'ellipsis-text': 'nowrap-hidden overflow-ellipsis',
    'transition-base': 'transition-all duration-300 ease-in-out'
  },
  theme: {
    colors: {
      primary: 'var(--primary-color)',
      primary_hover: 'var(--primary-color-hover)',
      primary_pressed: 'var(--primary-color-pressed)',
      primary_active: 'var(--primary-color-active)',
      info: 'var(--info-color)',
      info_hover: 'var(--info-color-hover)',
      info_pressed: 'var(--info-color-pressed)',
      info_active: 'var(--info-color-active)',
      success: 'var(--success-color)',
      success_hover: 'var(--success-color-hover)',
      success_pressed: 'var(--success-color-pressed)',
      success_active: 'var(--success-color-active)',
      warning: 'var(--warning-color)',
      warning_hover: 'var(--warning-color-hover)',
      warning_pressed: 'var(--warning-color-pressed)',
      warning_active: 'var(--warning-color-active)',
      error: 'var(--error-color)',
      error_hover: 'var(--error-color-hover)',
      error_pressed: 'var(--error-color-pressed)',
      error_active: 'var(--error-color-active)',
      dark: '#18181c'
    }
  }
});

最终效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tm0sYkU0-1670997988870)(assets/image-20221214140513-ke7m9cl.png)]

参考开源项目:GitHub - honghuangdc/soybean-admin: A fresh and elegant admin template, based on Vue3,Vite3,TypeScript,NaiveUI and UnoCSS [一个基于Vue3、Vite3、TypeScript、NaiveUI 和 UnoCSS的清新优雅的中后台模版]

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

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

相关文章

Python基础语法之注释、缩进、数字类型、一句多行和多行一句等的讲解及演示(超详细 附源码)

Python是实现了平台无关性的高级程序设计语言,它是在源代码程序与各平台的机器码之间插入了一个虚拟机,也就是说源代码程序不再直接翻译成机器码,而是先编译成虚拟机的字节码,再将字节码解释成各平台可执行的机器码。 Python源代…

传输层协议 —— TCP(图解2)

​ 目录 一、前言 二、重传机制 1. 超时重传 2. 快速重传 3. SACK 4. D-SACK 三、滑动窗口 1. 发送方的滑动窗口 2. 程序是如何表示发送方的四个部分 3. 接收方的滑动窗口 四、流量控制 五、拥塞控制 1. 慢启动 2. 拥塞避免 3. 拥塞发生 4. 快速恢复 六、TCP…

Moonbeam生态说|聊聊平行链Bifrost及其与Moonbeam集成最新动态

「Moonbeam生态说」是Moonbeam中文爱好者社区联合Moonbeam中文高级大使组织的社区AMA活动。 该活动为已部署Moonriver或Moonbeam的项目方提供了在主流Moonbeam非官方中文社区内介绍自己的项目信息,包括:项目介绍、团队介绍、技术优势等,帮助社…

[附源码]Node.js计算机毕业设计高校本科毕业及资料存档管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

基于Android的迷你桌球游戏设计与实现

目录 摘要11 关键词11 绪论11 1 游戏开发概述22 1.1 背景22 1.2 课题来源33 1.3 国内外研究现状33 1.4 Android应用程序构成44 1.4.1 应用程序55 1.4.2 应用程序框架55 1.4.3 库与运行环境55 1.4.4 内核55 2 游戏开发平台搭建55 2.1 SDK的下载与安装55 2.2 Ecli…

Chrome 解决 主页被qsearch 拦截

原文地址:谷歌浏览器被劫持如何解决(附完美攻略) - 知乎 今天,发现Chrome浏览器主页被修改了,尝试使用设置里主页,外观设置,都没有效果。改好了,但只要一刷新,主页又恢复…

短链是什么原理?怎么实现呢?

目录一、为什么需要短链二、短链跳转访问原理三、短链生成实现方案1、自增序列算法2、Hash算法四、代码示例1、表结构及索引2、外部依赖3、Base62Utils4、DAO层5、业务层五、测试用例一、为什么需要短链 内容营销中给用户推送营销消息最常见的方式就是发短信,比如三…

Hadoop的MapReduce基本流程体验

目录 MapReduce 编程规范 Mapper阶段 Reducer阶段 Driver阶段 常用数据序列化类型 案例实施 WordCountMapper类 WordCountReducer类 WordCountDriverr 驱动类 HDFS测试 MapReduce 编程规范 用户编写的程序分成三个部分:Mapper、Reducer 和 Driver。 Mappe…

使用粒子效果动画组成模型[自定义shader实现]

文章目录优点实现思路传递给Shader的数据根据模型数据生成数据传递给Shader自定义shader 连接cpu与gpu顶点着色器 计算位置片元着色器优点 性能卓越 上一篇使用的更改坐标实现 9万个点 页面非常卡顿 光是计算9万个点坐标更替的js就已经造成了堵塞 尝试了在顶点着色器中实现动画…

大数据Kudu(五):Kudu基于Cloudera Manager安装及配置

文章目录 Kudu基于Cloudera Manager安装及配置 一、启动CM集群 二、登录ClouderaManager平台安装Kudu

TCO-PEG-RGD 反式环辛烯聚乙二醇线肽RGD

反式环辛烯(TCO)作为亲双烯体与S-四嗪(Tetrazine)在生理条件下的反应有无需催化剂、反应速率快的优点,被广泛应用于生物和材料科学的研究中。 产品名称 TCO-PEG-RGD 反式环辛烯聚乙二醇线肽RGD 中文名称 线肽-聚乙二醇-反式环辛烯 英文名称 TCO-PEG-RGD 分…

“引进来,走出去”,锦江国际集团多重创新力引领绿色新发展

2022年12月13日,由南方财经全媒体集团指导,21世纪经济报道主办的“21世纪住宿业高峰论坛(2022)暨2022(第十九届)【金枕头】酒店大赏发布典礼”在上海如期举行。锦江国际集团副总裁周维应邀出席并发表“创新…

【开源项目】SFUD--通用串口Flash驱动库的移植和使用

1.简介 SFUD 是一款开源的串行 SPI Flash 通用驱动库。由于现有市面的串行 Flash 种类居多,各个 Flash 的规格及命令存在差异, SFUD 就是为了解决这些 Flash 的差异现状而设计,让我们的产品能够支持不同品牌及规格的 Flash,提高了…

JeecgBoot部署(Nginx+Tomcat)

环境搭建JeecgBoot搭建、Linux安装Nginx、Linux安装JDK8、Linux安装MySql8、Linux安装Redis、Linux安装Tomcat9前端打包 1.进入目录:cd D:\win11\git_data\jeecg_3.4.4\jeecgboot-vue32.安装依赖:pnpm install-->node_modules3.打包编译:p…

矩阵树定理

用途 矩阵树一般用于生成树计数的问题,比如求一个无向图中生成树的个数。用矩阵树定理能极大地降低时间复杂度。 前置知识:行列式 此部分可粗略浏览,了解即可。 对于一个一阶行列式,可写作 det(a1,1)a1,1det \left( \begin{ma…

[附源码]Node.js计算机毕业设计房车营地在线管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

大数据学习:shell脚本

文章目录一、执行shell脚本1、直接执行脚本(1)绝对路径方式执行脚本(2)相对路径方式执行脚本2、利用source命令执行脚本3、利用bash或sh命令执行脚本二、shell脚本实战任务一:显示当前用户主目录1)编写脚本…

3ds Max发生闪退怎么办?

3ds Max闪退 最近,小编在后台收到了一位炫云小伙伴的反馈:“我打开3ds Max后,总是出现闪退,究竟是什么情况?”实际上,闪退也细分为多种类型。例如:打开3ds Max直接闪退(logo加载界面…

某轻工制造企业“三步走”战略,搭建一站式数据应用平台

某轻工制造企业成立于1994年,是中国轻工业塑料行业十强企业之一。该企业信息系统之间烟囱化,数据融合难、共享难,无法形成数据资产体系为企业创造价值。因此,该企业与亿信华辰合作,建设一站式数据应用平台,…

【雕爷学编程】Arduino动手做(110)---JDY-31 蓝牙模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…