WXT+Vue3+sass+antd+vite搭建项目开发chrome插件

WXT+Vue3+sass+antd+vite搭建项目开发chrome插件

  • 前言
  • 一、初始化项目
  • 二、项目配置调整
  • 三、options页面配置
  • 四、集成antd
  • 五、集成sass
  • 六、环境配置
  • 七、代码注入

vue3:https://cn.vuejs.org/
axios:https://www.axios-http.cn/docs/api_intro
antd:https://www.antdv.com/components/config-provider-cn
sass:https://blog.csdn.net/randy521520/article/details/131242242
WXT:https://wxt.dev/
gulp-javascript-obfuscator:https://github.com/javascript-obfuscator/gulp-javascript-obfuscator
谷歌插件参考文档:https://developer.chrome.google.cn/docs/extensions/reference/api?hl=lv

前言

WXT的前身是vite-plugin-web-extension,vite-plugin-web-extension目前已经不再开发,只做维护,文章中静态js打包、静态js热更新、静态js混淆只是大概将了以下方法。不想费事的道友可通过此文章中的链接下载:https://blog.csdn.net/randy521520/article/details/146998467

一、初始化项目

1.cmd打开终端工具,运行:npx wxt@latest init

yarn:npx wxt@latest init
npm:npx wxt@latest init
pnpm:pnpm dlx wxt@latest init
bun:bunx wxt@latest init

2.输入项目名称,键盘方向键选择vue
在这里插入图片描述
3.键盘方向键选择选择包管理器
在这里插入图片描述
4.项目创建成功
在这里插入图片描述
5.开发者工具打开项目,打开开发者工具的终端,运行yarn install,安装package.json中的依赖包,安装成功后运行
在这里插入图片描述
6.安装成功后运行yarn dev,在打开的浏览器中加载打包好的扩展程序
在这里插入图片描述
7.打开百度,固定扩展程序,点击扩展程序出现WXT+Vue的标识,说明项目已经初步搭建成功
在这里插入图片描述
8.项目目录分析
在这里插入图片描述
9.从上面的截图可以看出,默认的时TS语法,如果不想用TS,可以把所有的TS文件换成js文件,然后重新运行yarn dev,查看扩展程序可以正常使用
在这里插入图片描述

二、项目配置调整

1.在根目录新建manifest.js文件,修改wxt.config.js,增加manifest配置
在这里插入图片描述
2.运行yarn dev,标题、版本、描述已经配置成功;注意:这里的manifest.js不是所有配置项都可以配置的,WXT会生成自己的配置项,向action中的配置项是无法通过manifest.js修改的,在下图可以看出manifest.js文件已经修改action的标题,但是WXT生成的manifest.json文件中的action并不是manifest.js配置的标题
在这里插入图片描述在这里插入图片描述
3.通过添加WXT模块修改action标题,在根目录新建modules>updateManifest.js,该文件不用引用,当构建项目时WXT会自己调用该模块
在这里插入图片描述
4.修改icon,只需要生成对应icon文件中的icon大小替换就行,访问:https://www.bejson.com/ui/imagehandler/可把icon转成任何尺寸
在这里插入图片描述

三、options页面配置

1.在entrypoints目录新建options文件夹,把popup中的文件复制到options文件夹,修改options>app.vue
在这里插入图片描述
2.修改popup>app.vue跳转到options页面
在这里插入图片描述

3.修改manifest.js,运行yarn dev,点击打开配置页,options页面可以正常跳转
在这里插入图片描述

四、集成antd

1.终端运行:yarn add ant-design-vue,安装antd
在这里插入图片描述
2.修改popue.vue,运行yarn dev,点击固定的插件,button正常显示
在这里插入图片描述
3.组件按需引入,运行yarn add unplugin-vue-components -D
在这里插入图片描述
4.修改wxt.config.js
在这里插入图片描述
5.修改popue.vue,删除button的导入语句,运行yarn dev,点击固定的插件,button正常显示
在这里插入图片描述

五、集成sass

1.终端运行:yarn add sass -D,安装sass
在这里插入图片描述
2.在assets中新建scss>global.scss、scss>globalMixin.scss、scss>globalVar.scss、scss>iframe.scss,global.scss用于通用的样式、globalMixin.scss用于Mixin通用的样式、globalVar.scss用于全局变量、iframe.scss用于导出scss文件,修改wxt.config.js,将iframe.scss文件引入到项目中
在这里插入图片描述
3.修改global.scss、globalMixin.scss、globalVar.scss,globalVar.scss
在这里插入图片描述
4.修改popue.vue,运行yarn dev,点击固定的插件,div样式使用了scss变量、Mixin函数、scss通用样式已生效
在这里插入图片描述

六、环境配置

1.在根目录新增.env.development、.env.production
在这里插入图片描述
2.修改package.json脚本命令
在这里插入图片描述
3.修改content.js,打印环境配置,运行yarn dev,修改content.js时需要把matches修改为<all_urls>,matches使用来匹配域名的,匹配上的域名content.js才会有效,F12查看控制台,环境配置成功
在这里插入图片描述
4.脚本命令说明

1. yarn dev 启动开发环境
2. yarn pro 启动正式环境
3. yarn dev:firefox 启动Firefox开发环境
4. yarn pro:firefox 启动Firefox正式环境
5. yarn build 构建正式环境
6. yarn build:firefox 构建Firefox正式环境
7. yarn zip 打包正式环境
8. yarn zip:firefox 打包Firefox正式环境
9. yarn compile 类型检查

七、代码注入

1.在插件开发的时候,可能会由代码注入的场景,通过代码注入去操作某个网站的元素,如修改网站背景,在assets下新建js>update.js
在这里插入图片描述
2.修改content.js,把update.js注入到当前页面
在这里插入图片描述
3.运行yarn dev,会发现背景色并没有修改成功,F12控制台报错,这个报错说明未找到文件,这是因为WXT未把update.js打包到项目中
在这里插入图片描述在这里插入图片描述
4.修改modules>updateManifest.js
在这里插入图片描述
5.运行yarn dev,访问百度,会发现背景已经设置为红色
在这里插入图片描述
6.修改update.js,增加console.log代码,查看控制台会发现代码并没有生效,那是因为WXT虽然热更新,但是update.js是静态资源,只是作为文件注入到网页中,WXT监听不到文件的变化
在这里插入图片描述
7.静态资源热更新的问题。要解决该问题需要安装chokidar插件,监听文件,但是不能写在modules>updateManifest.js,WXT的模块只要在服务更新、项目构建时才会生效,如果只写在updateManifest.js中虽然可以把修改后的文件重新打包,但是却不能达到热更新的效果,要达到热更新的效果,需要写个vite的插件,通过server的worket发送消息给客户端才能达到热更新的效果
在这里插入图片描述
8.打包好的update.js还有个问题就是代码安全问题,如果需要代码安全就要需要再写个vite插件,通过gulp、gulp-javascript-obfuscator配置混肴js
在这里插入图片描述
9.gulp-javascript-obfuscator混淆配置

{compact: true, // 压缩代码,删除换行符controlFlowFlattening: true, // 控制流扁平化,增加代码复杂度controlFlowFlatteningThreshold: 1, // 控制流扁平化应用的概率deadCodeInjection: true, // 注入死代码deadCodeInjectionThreshold: 1, // 死代码注入的概率debugProtection: true, // 启用调试保护debugProtectionInterval: 4000, // 调试保护间隔时间disableConsoleOutput: true, // 禁用控制台输出identifierNamesGenerator: 'hexadecimal', // 使用十六进制生成标识符名称,mangled使用简单的变量名混淆log: false, // 禁用日志输出numbersToExpressions: true, // 将数字转换为表达式renameGlobals: false, // 不重命名全局变量reservedNames: ['window', 'document', 'console'], // 保留指定的全局变量selfDefending: true, // 启用自防御功能simplify: true, // 简化代码splitStrings: true, // 分割字符串splitStringsChunkLength: 5, // 字符串分割的块长度stringArray: true, // 启用字符串数组stringArrayCallsTransform: true, // 转换字符串数组调用stringArrayEncoding: ['rc4'], // 使用rc4编码字符串数组stringArrayIndexShift: true, // 启用字符串数组索引偏移stringArrayRotate: true, // 旋转字符串数组stringArrayShuffle: true, // 打乱字符串数组stringArrayWrappersCount: 5, // 字符串数组包装器数量stringArrayWrappersChainedCalls: true, // 启用字符串数组包装器链式调用stringArrayWrappersParametersMaxCount: 5, // 字符串数组包装器参数最大数量stringArrayWrappersType: 'function', // 字符串数组包装器类型stringArrayThreshold: 1, // 字符串数组应用的概率transformObjectKeys: true, // 转换对象键unicodeEscapeSequence: false // 禁用Unicode转义序列。
}

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

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

相关文章

JSAPI2.4——正则表达式

一、语法 const str 一二三四五六七八九十 //判断内容 const reg /二/ //判断条件 console.log(reg.test(str)); //检查 二、test与exec方法的区别 test方法&#xff1a;用于判断是否符合规则的字符串&#xff0c;返回值是布尔值 exec方法&…

燃气用户检修工考试精选题

燃气用户检修工考试精选题&#xff1a; 我国国家标准规定民用天然气中硫化氢含量最高允许浓度是&#xff08; &#xff09;。 A. 20mg/m B. 15mg/m C. 5mg/m D. 50mg/m 答案&#xff1a;A 城市燃气应具有可以察觉的臭味&#xff0c;当无毒燃气泄漏到空气中&#xff0c;达到爆炸…

【前端】1h 搞定 TypeScript 教程_只说重点

不定期更新&#xff0c;建议关注收藏点赞。 目录 简介使用基本类型、类型推断和类型注解接口、类型别名、联合类型类与继承泛型GenericsReact 与 TS 进阶高级类型装饰器Decorators模块系统TypeScript 编译选项 简介 TypeScript&#xff08;简称 TS&#xff09;是一种由微软开发…

MyBatis 参数绑定

一、MyBatis 参数绑定机制 1.1 核心概念 当 Mapper 接口方法接收多个参数时&#xff0c;MyBatis 提供三种参数绑定方式&#xff1a; 默认参数名&#xff1a;arg0、arg1&#xff08;Java 8&#xff09;或 param1、param2Param 注解&#xff1a;显式指定参数名称POJO/DTO 对象…

【解决方案】Linux解决CUDA安装过程中GCC版本不兼容

Linux解决CUDA安装过程中GCC版本不兼容 目录 问题描述 解决方法 安装后配置 问题描述 Linux环境下安装 CUDA 时&#xff0c;运行sudo sh cuda_10.2.89_440.33.01_linux.run命令出现 “Failed to verify gcc version.” 的报错&#xff0c;提示 GCC 版本不兼容&#xff0c;查…

人工智能数学基础(一):人工智能与数学

在人工智能领域&#xff0c;数学是不可或缺的基石。无论是算法的设计、模型的训练还是结果的评估&#xff0c;都离不开数学的支持。接下来&#xff0c;我将带大家深入了解人工智能数学基础&#xff0c;包括微积分、线性代数、概率论、数理统计和最优化理论&#xff0c;并通过 P…

Shell脚本-嵌套循环应用案例

在Shell脚本编程中&#xff0c;嵌套循环是一种强大的工具&#xff0c;可以用于处理复杂的任务和数据结构。通过在一个循环内部再嵌套另一个循环&#xff0c;我们可以实现对多维数组、矩阵操作、文件处理等多种高级功能。本文将通过几个实际的应用案例来展示如何使用嵌套循环解决…

勘破养生伪常识,开启科学养生新篇

​在养生潮流风起云涌的当下&#xff0c;各种养生观点和方法层出不穷。但其中有不少是缺乏科学依据的伪常识&#xff0c;若不加分辨地盲目跟从&#xff0c;不仅难以实现养生目的&#xff0c;还可能损害健康。因此&#xff0c;勘破这些养生伪常识&#xff0c;是迈向科学养生的关…

Nacos-3.0.0适配PostgreSQL数据库

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

机器学习第三篇 模型评估(交叉验证)

Sklearn:可以做数据预处理、分类、回归、聚类&#xff0c;不能做神经网络。原始的工具包文档&#xff1a;scikit-learn: machine learning in Python — scikit-learn 1.6.1 documentation数据集:使用的是MNIST手写数字识别技术&#xff0c;大小为70000&#xff0c;数据类型为7…

如何在 IntelliJ IDEA 中编写 Speak 程序

在当今数字化时代&#xff0c;语音交互技术越来越受到开发者的关注。如果你想在 IntelliJ IDEA&#xff08;一个强大的集成开发环境&#xff09;中编写一个语音交互&#xff08;Speak&#xff09;程序&#xff0c;那么本文将为你提供详细的步骤和指南。 一、环境准备 在开始编…

AI大模型学习十四、白嫖腾讯Cloud Studio AI环境 通过Ollama+Dify+DeepSeek构建生成式 AI 应用-接入DeepSeek大模型

一、说明 需要阅读 AI大模型学习十三、白嫖腾讯Cloud Studio AI环境 通过OllamaDifyDeepSeek构建生成式 AI 应用-安装-CSDN博客https://blog.csdn.net/jiangkp/article/details/147580344?spm1011.2415.3001.5331 我们今天干点啥呢&#xff0c;跟着官网走 模型类型 在 Dify…

《Astro 3.0岛屿架构让内容网站“脱胎换骨”》

内容优先的网站越来越成为主流。无论是新闻资讯、知识博客&#xff0c;还是电商产品展示&#xff0c;用户都希望能快速获取所需内容&#xff0c;这对网站的性能和体验提出了极高要求。而Astro 3.0的岛屿架构&#xff0c;就像是为内容优先网站量身定制的一把神奇钥匙&#xff0c…

在 UniApp 中实现 App 与 H5 页面的跳转及通信

在移动应用开发中&#xff0c;内嵌 H5 页面或与外部网页交互是常见需求。UniApp 作为跨平台框架&#xff0c;提供了灵活的方式实现 App 与 H5 的跳转和双向通信。本文将详细讲解实现方法&#xff0c;并提供可直接复用的代码示例。 文章目录 一、 App 内嵌 H5 页面&#xff08;使…

springboot 实现敏感信息脱敏

记录于2025年4月28号晚上--梧州少帅 1. 定义枚举类&#xff1a; public enum DesensitizeType {NAME, EMAIL } 2. 创建自定义注解&#xff1a; 用于标记需要脱敏的字段及其类型。 Retention(RetentionPolicy.RUNTIME) JacksonAnnotationsInside JsonSerialize(using Desen…

SNMP协议之详解(Detailed Explanation of SNMP Protocol)

SNMP协议之详解 一、前言 SNMP&#xff0c;被形象地喻为网络世界大的工具箱&#xff0c;使他们能的“智慧守护者”&#xff0c;它为网络管理员装备了一套功能强够实现对网络设备状态的实时监控、性能数据的全面收集、远程配置的灵活管理以及故障事件的即时响应。借助SNMP&…

SpeedyAutoLoot

SpeedyAutoLoot自动拾取插件 SpeedyAutoLoot.lua local AutoLoot CreateFrame(Frame)SpeedyAutoLootDB SpeedyAutoLootDB or {} SpeedyAutoLootDB.global SpeedyAutoLootDB.global or {}local BACKPACK_CONTAINER BACKPACK_CONTAINER local LOOT_SLOT_CURRENCY LOOT_SLOT…

xe-upload上传文件插件

1.xe-upload地址&#xff1a;文件选择、文件上传组件&#xff08;图片&#xff0c;视频&#xff0c;文件等&#xff09; - DCloud 插件市场 2.由于开发app要用到上传文件组件&#xff0c;uni.chooseFile在app上不兼容&#xff0c;所以找到了xe-upload&#xff0c;兼容性很强&a…

Golang|外观模式和具体逻辑

最终返回的是Document的切片&#xff0c;然后取得Bytes自己再去做反序列化拿到文档的各种详细信息。 外观模式是一种结构型设计模式&#xff0c;它的目的是为复杂的子系统提供一个统一的高层接口&#xff0c;让外部调用者&#xff08;客户端&#xff09;可以更简单地使用子系统…

2025年3月AGI技术月评|技术突破重构数字世界底层逻辑

〔更多精彩AI内容&#xff0c;尽在 「魔方AI空间」 &#xff0c;引领AIGC科技时代〕 本文作者&#xff1a;猫先生 ——当「无限照片」遇上「可控试穿」&#xff0c;我们正在见证怎样的智能革命&#xff1f; 被低估的进化&#xff1a;开源力量改写游戏规则 当巨头们在AGI赛道…