手写vite-alias插件

整个插件就是在vite不同的生命周期中干不同的事情

手写vite-alias其实就是抢在vite.config.js配置文件执行之前,去改写vite.config.js配置文件。

项目根目录下src中建立plugins文件夹,在建立ViteAlias.js文件

// 必须给vite返回一个对象const fs = require("fs");
const path = require("path");function diffDirAndFile(dirFilesArr = [], basePath = "") {const result = {dirs: [],files: [],};dirFilesArr.forEach((name) => {const curFileState = fs.statSync(path.resolve(__dirname, basePath + "/" + name));const isDir = curFileState.isDirectory();if (isDir) {result.dirs.push(name);} else {result.files.push(name);}});return result;
}function getTotalSrcDir(keyName) {// 获取这个目录下的所有文件及文件夹console.log("====", path.resolve(__dirname, "../"));// 当前是在plugins文件夹目录下,/vite/src/plugins 所以拼接的时候需要往上返一层const result = fs.readdirSync(path.resolve(__dirname, "../"));const diffResult = diffDirAndFile(result, "../");const resolveAliasObj = {};diffResult.dirs.forEach((dirName) => {const key = `${keyName}${dirName}`;const absPath = path.resolve(__dirname, "../" + dirName);resolveAliasObj[key] = absPath;});return resolveAliasObj;
}module.exports = ({ keyName = "@" } = {}) => {return {/**** @param {*} config 目前vite.config.js 离的配置文件,只是拿到里面内容,不去执行配置文件* @param {*} env 有两个参数mode(表示是生产还是开发环境),command(执行的是dev还是build)*/config(config, env) {const resolveAliasObj = getTotalSrcDir(keyName);return {// 在这里需要返回一个resolve出去,将src下面的所有文件进行别名控制resolve: {alias: resolveAliasObj,},};},};
};

vite.config.js配置文件中引用

import { defineConfig } from "vite";
const MyVite = require("./src/plugins/Vitealias.js");
export default defineConfig({envPrefix: "ENV_",plugins: [MyVite()],
});

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

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

相关文章

自动删除 PC 端微信缓存数据,包括从所有聊天中自动下载的大量文件、视频、图片等数据内容,解放你的空间。

Clean My PC Wechat 自动删除 PC 端微信自动下载的大量文件、视频、图片等数据内容,解放一年几十 G 的空间占用。 该工具不会删除文字的聊天记录,请放心使用。请给个 Star 吧,非常感谢! 现已经支持 Windows 系统中的所有微信版本…

整合Tess4J图文识别技术

仓库地址:https://gitee.com/z3inc/tess4j-demo.git 1. OCR图文识别介绍 OCR(全称 Optical Character Recognition,直译为光学字符识别)用于图片文字识别,例如 提取图片中车牌号等等。 Java中实现OCR的技术方案有&…

DGC-GNN 配置运行

算法 DGC-GNN,这是一种全局到局部的图神经网络,用于提高图像中2D关键点与场景的稀疏3D点云的匹配精度。与依赖视觉描述符的方法相比,这种方法具有较低的内存需求,更好的隐私保护,并减少了对昂贵3D模型维护的需求。DGC-…

创建继承自QObject的线程:一个详细指南

目录标题 步骤 1:创建一个新的QObject子类步骤 2:在新的QObject子类中实现工作代码步骤 3:创建一个新的QThread对象步骤 4:管理线程的生命周期步骤 5:处理线程间通信结论 在Qt中,线程可以通过继承QThread类…

基于51单片机的时钟万年历—可农历显示

基于51单片机的时钟万年历 (仿真+程序+原理图+设计报告) 功能介绍 具体功能: 1、可以显示年、月、日、时、分、秒、星期、农历; 2、按键可以设置闹钟及报警; 3、按键可以调整时…

[Java EE] 文件IO (二):文件内容读写-----数据流

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀Java …

(2024,MambaOut,Mamba 适合长序列,区分指标,不适合分类,适合检测和分割)视觉真的需要 Mamba 吗?

MambaOut: Do We Really Need Mamba for Vision? 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 简介 3. 概念讨论 3.1 Mamba 适合哪些任务? 3.2 视觉识别任…

AtCoder Regular Contest 177

A - Excange 题意 用这些零钱能否不找零地买这些物品 思路 因为 500 5 100 10 50 50 10 500 1 5005\times 10010\times 5050\times 10500\times 1 5005100105050105001。 所以说,我们这道题可以采用贪心算法,优先取大的减去目前零钱最大的…

小美的区间删除

因为结尾0的个数取决于有多少对 ( 2 , 5 ) (2,5) (2,5) 相乘,那么对于下面例题,解题思路为: 1、将每个数字中的2和5剥离出来,然后用两个数组进行记录,然后其子数 ( 2 , 5 ) (2,5) (2,5)组成对至少为k个。 2、遍历每一…

echarts实现金价可视化大屏(项目实战)

前言 最近由于某种原因参加了一个比赛,三天时间肝出来一个可视化大屏项目(无后端),代码已开源,但是还在比赛期间不知道会不会影响到 技术使用:html,css,js,echarts&#…

Jmeter+Grafana+Prometheus搭建压测监控平台

本文不介绍压测的规范与技术指标,本文是演示针对Jmeter如何将压测过程中的数据指标,通过Prometheus采集存储,并在Granfan平台进行仪表盘展示; 介绍 系统压测属于日常项目开发中的一个测试环节,使用测试工具模拟真实用户行为&…

Vue3实战笔记(18)—pinia注意事项和经验总结

文章目录 前言一、解构的注意事项二、注意创建和使用顺序总结 前言 在采用Pinia进行状态管理时,总结了一些关键注意事项与实战经验,旨在优化开发流程并确保高效利用其功能。这包括了正确规划存储结构、充分利用响应式优势、妥善处理模块化以促进代码可维…

Springboot+MybatisPlus如何实现分页和模糊查询

实现分页查询的时候我们需要创建一个config配置类 1、创建MybatisPlusConfig类 Configuration //表明这是一个配置类 ConditionalOnClass(Value{PaginationInterceptor.class} //ConditionalOnClass:当指定的类存在时,才会创建对应的Bean // 这里当PaginationInt…

Go-Zero定义API实战:探索API语法规范与最佳实践(五)

前言 上一篇文章带你实现了Go-Zero模板定制化,本文将继续分享如何使用GO-ZERO进行业务开发。 通过编写API层,我们能够对外进行接口的暴露,因此学习规范的API层编写姿势是很重要的。 通过本文的分享,你将能够学习到Go-Zero的API…

测试项目实战--安享理财2(Jmeter接口测试)

说明: 1.访问地址: 本项目实战使用的是传智播客的安享理财项目(找了半天这个项目能免费用且能够满足测试实战需求) 前台:http://121.43.169.97:8081/ 后台:http://121.43.169.97:8082/ (点赞收藏…

前端工程化 - 快速通关 - vue

目录 npm 2.1环境 2.2命令 2.3使用流程 Vite 3.1简介 3.2实战 Vue3 4.1组件化 4.2SFC 4.3Vue工程 4.4基础使用 4.5进阶用法 4.6总结 npm npm 是 nodejs 中进行 包管理 的工具; 下载:Node.js — Run JavaScript Everywhere 2.1环境 ●安…

KubeKey 部署 K8s v1.28.8 实战

在某些生产环境下,我们仅需要一个原生的 K8s 集群,无需部署 KubeSphere 这样的图形化管理控制台。在我们已有的技术栈里,已经习惯了利用 KubeKey 部署 KubeSphere 和 K8s 集群。今天,我将为大家实战演示如何在 openEuler 22.03 LT…

使用DBeaver的第2天-使用sql导入数据

使用sql导入数据这块我会仔细的说一下 首先位置一定要放在库上(实例),放在表上可不好使用哦 然后点击工具-再点击执行脚本 这样就执行成功了 但是如果你执行失败了,多半可能是因为本地没有部署mysql,记住只有本地有…

【IOS】swift新手踩坑总汇

这里写自定义目录标题 ESTabBarController_swiftQMUIKit ESTabBarController_swift Exception NSException * "调用了 pushViewController 但实际上没 push 成功&#xff0c;viewController&#xff1a;<HuangShan.ViewControllers: 0x106832a00>; superclass: EST…

【强训笔记】day23

NO.1 思路&#xff1a;直接计算结果&#xff0c;先计算怪物可以抗几次攻击&#xff0c;再计算勇士受到的伤害&#xff0c;如果勇士的攻击力大于等于怪物的血量&#xff0c;那么就可以击杀无数只&#xff0c;如果勇士的血量正好是受到攻击的整数倍&#xff0c;那么击杀的怪物数…