工程化开发谷歌插件到底有爽

news/2024/11/30 10:49:52/文章来源:https://www.cnblogs.com/gjzsa/p/18568338

工程化开发谷歌插件到底有爽

谷歌插件开发本质上就是写一些 html + js + css

img

谷歌开发心得吧

manifest.json 文件

 {"manifest_version": 3,"name": "发布助手","version": "3.0","description": "前端资源监测","permissions": ["notifications","activeTab","storage"],"content_scripts": [{"matches": ["https://*/*","http://localhost:8080/"],"js": ["services/index.js"]}],"background": {"service_worker": "services/background.js","persistent": true},"action": {"default_popup": "html/index.html","default_icon": {"16": "images/youku.png","48": "images/youku.png","128": "images/youku.png"}},"icons": {"16": "images/youku.png","48": "images/youku.png","128": "images/youku.png"}
}

剩下核心文件就是一个html 和一个services

html 文件就是你点击插件所弹出来的前端页面
services 文件相当于一个后端处理数据的地方

前端开发

前端模块化开发,项目创建
初始化一个 React 项目使用 Vite Less TypeScript ESLint Prettier Ant Design Lodash

# 在终端中执行以下命令来创建一个新的 Vite 项目:
npm create vite@latest my-project -- --template react-ts# 进入项目目录:
cd my-project# 在终端中运行以下命令来安装 LESS:
npm install less less-loader --save-dev# 安装 Ant Design 和 Lodash:
npm install antd lodash# 安装 ESLint、Prettier 和相关插件:【暂时忽略这些】
npm install --save-dev eslint prettier eslint-plugin-react eslint-plugin-react-hooks eslint-config-prettier eslint-plugin-prettier# 初始化 ESLint 和 Prettier
# 暂时忽略这些

后端开发

后端逻辑主要是根据前端操作进行一些数据的获取或者一些谷歌api的调用,所以核心就是想
写一些js,但是如果在一个文件中写js,写的太多根本不好维护,所以想通过模块化的方式来
分模块写js,各个模块可以直接使用import``export的方式进行导出和引用

 # webpack 安装npm install --save-dev webpack webpack-cli babel-loader @babel/core @babel/preset-env

webpack.config.js文件配置

 const path = require('path');
module.exports = {mode: 'development',entry: {index: './services/index.js',  // 第一个入口background: './services/background.js',  // 第二个入口},output: {filename: '[name].js', // 使用 entry 对象的键作为输出文件名path: path.resolve(__dirname, 'youku404/services'),clean: true,  // 每次构建前清理/dist文件夹},devtool: 'source-map', // 使用 'source-map' 而不是 'eval'module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: {loader: 'babel-loader', // 你可以根据需要添加 Babel 支持}}]},resolve: {extensions: ['.js']}
};

.babelrc文件配置

 {"presets": ["@babel/preset-env"]
}

package.json文件新加命令 build:service

    {"dev": "npm run dev --prefix youku-plugin","build": "npm run build:dev  && npm run build:service && npm run commit","build:dev": "npm run build --prefix youku-plugin","build:service": "webpack","commit": "git pull && git add . && git commit -m '版本更新' && git push","i": "npm install --prefix youku-plugin"}

解决资源的打包问题

❓:我要修改 打包之后的文件路径 怎么办

// 💡: 在你的 Vite 项目目录下,找到并打开 vite.config.ts 文件。
// 💡: 修改 build 配置
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({plugins: [react()],build: {outDir: '../youku404/html', // 修改打包后的输出目录assetsDir: 'publish', // 修改静态资源的子目录// 其他 build 选项},
})

❓:最后生成的html 模版资源的引入有问题 怎么修改呢

// 💡:base 选项用于设置生成的资源的基路径。你可以将其设置为 / 或其他符合你部署路径的值
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({plugins: [react()],base: '/html',build: {outDir: '../youku404/html', // 修改打包后的输出目录assetsDir: 'publish', // 修改静态资源的子目录// 其他 build 选项},
})

❓:vite 每次打包的之后 先clear 上次的打包结果

// 💡:使用node 脚本来清除上次的打包结果
const fs = require('fs');
const path = require('path');const cleanDist = () => {const distPath = path.join(__dirname, '../../youku404/html');if (fs.existsSync(distPath)) {fs.rmSync(distPath, { recursive: true, force: true });console.log('清理旧的打包结果...');}
};
cleanDist();

❓:在前端调用谷歌api的时候会ts报错

 # 解决ts报错 💡:npm install --save-dev @types/chrome

解决git忽略问题

因为在开发前端项目的时候,自己已经将整个项目使用 git 初始化了一遍,也有了自己的 .gitignore 文件,导致我在将这些文件整合成一个项目的时候,在想通过最外层的git配置去控制这些文件的忽略文件的时候不生效,所以先要将前端的项目文件中的 .git 文件进行删除,才可以对里面的文件进行忽略控制结果如下

img

外层 package.json 文件控制项目里面的文件的运行脚本和启动命令

npm run dev --prefix youku-plugin

❓:--prefix 命令解释

💡:在使用 npm 命令时,--prefix 选项用于指定一个不同的目录作为当前工作目录

❓:命令中的 && 和 | 的使用场景

💡:&& 前面命令执行完成✅之后才会执行后面的命令  | 前面和后面的命令都会执行 不管前面命令是否执行完成 

解决互相通信问题

后端开启一个消息监控即可

 export const init = () => {/* 监听通知按钮点击事件 */chrome.notifications.onButtonClicked.addListener((notificationId, buttonIndex) => {/* 0 去查看 1 忽略 */if (buttonIndex == 0) {chrome.tabs.create({ url: targetUrl });}})chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {const { action, info, from, tipType } = requestconsole.log('收到谷歌插件的消息:', request);configSwitch(action, info, from, tipType)});
}

然后就是根据不同的消息去做不同的事情 只需要完成 configSwitch 函数的编写就行

前端开发主要通过事件去向后端发送消息就行,当然也可以根据后端发送的消息进行一些操作

 export const sendMessage = (action, info, from = '', tipType = 'message') => {chrome.runtime?.sendMessage({ action, info, from, tipType });
}// 接受消息
export const receiveMessage = (callback: any) => {chrome.runtime?.onMessage?.addListener((request) => {console.log('web测收到消息', request);const { action, info } = requestcallback(action, info)});
}

调试心得

 # 调试

参考过的比较好的文章推荐

# Chrome插件调用notifications接口无响应https://juejin.cn/post/6992889349213782030# chrome.notifications.create有哪些用法https://blog.csdn.net/m0_65659549/article/details/139260118# chrome插件扩展脚本开发02(主要介绍各个js之间的通信方式)
https://blog.csdn.net/wuzeipero/article/details/136183687

解决了谷歌插件通知异常问题

  1. 阅读上面第一个文章

  2. 配置系统消息提示,配置如下:
    img

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

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

相关文章

12-渗透测试

1、水平越权&垂直越权漏洞实验水平越权lucy用户登入成功后,将url的username参数由lucy改为kobe,即可查看到kobe的信息,实现水平越权垂直越权使用低权限用户pikachu访问添加用户页面,行使管理员admin用户的添加用户权限用户添加成功,实现垂直越权2、密码修改逻辑漏洞实…

vxe-modal 实现弹窗多窗口

官网:https://vxeui.com<template><div><p><vxe-button content="点击弹出" @click="openEvent"></vxe-button></p></div> </template><script> import { VxeUI } from vxe-pc-ui export default …

redis 流量增加过多问题排查解决

背景 Java项目,使用Redis集群。 现象 Redis集群,单台流量增加过多。 在redis服务器上:iftop -npP排查过程 发现流量上涨是同一台机器IP尾号3。到这台机器上查看。 top 命令查看进程idtop -H -p 1748 查看具体线程信息,可以看到,有三个线程执行100多小时,而且占用较多cpu…

RX23E-B系列微控制器是工业传感器设备的理想选择!R5F523E5B介绍,EFR32BG13P732F512GM48-D蓝牙/TH58NVG2S3HTAI0存储IC

RX23E-B系列微控制器是工业传感器设备的理想选择!R5F523E5B介绍,EFR32BG13P732F512GM48-D蓝牙/TH58NVG2S3HTAI0存储ICRX23E-B 系列微控制器具有内置模拟前端 (AFE),是工业传感器设备的理想选择。 与上一代的 RX23E-A 相比,RX23E-B 的24 位 Delta Sigma 模/数转换器在高速性…

100ASK_IMX6ULL-PRO 数码相框扩展项目:支持打开阅读 TXT 文件

背景说明 本篇内容基于百问网嵌入式Linux项目数码相框与文件浏览器和嵌入式Linux电子书阅读器 需求:在文件浏览器界面中支持双击打开TXT类型文件,进入新界面进行文本阅读和翻页控制。 实现思路说明 浏览器界面中响应双击操作,识别TXT类型文件成功后进入阅读器界面。可参考项…

mysql数据库聚合与拆分

1. 背景在用户使用的时候会有统计数据的情况,在多表联查的时候分类时会有,同一个类型出现多次,然后任务需区是出现一次类型名 2. 聚合查询 GROUP_CONCAT(聚合字段) group_by(聚合字段)SELECT report.serialNumber as 病人编号, GROUP_CONCAT(label.lableName) AS &q…

GIS与数字孪生融合:打造智能3D空域管理平台

在数字化转型的浪潮中,地理信息系统(GIS)技术正以其独特的空间分析能力,为城市规划和管理带来革命性的变化。今天,我们将探讨一个前沿话题:基于GIS技术的数字孪生3D空域规划与飞行信息管理平台。 什么是数字孪生?数字孪生,简而言之,就是物理世界中的实体在数字世界中的…

iOS内购——自动续订型会员

原文链接:https://blog.csdn.net/HMOnlyou/article/details/139446159 一、内购支付流程 用户选择商品,发起购买操作,支付完成(会从AppleID账号关联的支付宝/微信 /银行卡完成扣款); 拿到APP本地生成的票据信息发送到苹果服务器验证有效性。1)APP端可以直接向苹果服务器…

微信小游戏sdk接入支付和登录,解决了wx原生不支持ios支付的痛点

本文介绍了微信小游戏sdk登录支付的接入。支付又分为 android支付和 ios支付。由于微信小游戏内不支持ios支付, 通过引入客服会话的方式实现。 侧重于服务器方向,对于复杂的验证签名、解密算法部分提供了Go版本的代码支持【原创】前情提要 微信小游戏是小程序的一种。 项目接入…

vxe-form table 表单修改数据校验错误提示的样式

官网:https://vxeui.com<template><div><vxe-formv-bind="formOptions"@submit="submitEvent"@reset="resetEvent"></vxe-form></div> </template><script> import { VxeUI } from vxe-pc-uiexport …

vxe-form table 设置表单上下布局

官网:https://vxeui.com<template><div><vxe-formv-bind="formOptions"@submit="submitEvent"@reset="resetEvent"></vxe-form></div> </template><script> import { VxeUI } from vxe-pc-uiexport …

LeetCode19 删除链表的倒数第 N 个结点

删除链表的倒数第 N 个结点LeetCode19 删除链表的倒数第 N 个结点 题目链接:LeetCode19 描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]思路定义fast指针和slow指针,初始值为虚拟头结点 fast首先…