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.pswp.cn/news/903285.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903285.shtml
英文地址,請注明出處:http://en.pswp.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賽道…