大家好,我是 dom 哥。这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星

Chrome 扩展能够提高浏览器的使用体验,通过自定义 UI 界面,监听浏览器事件,改变 Web 页面等操作来延展浏览器的功能。

Chrome 扩展项目使用前端 html,css,js 基础技术开发,一大痛点就是改动代码后的扩展更新问题,先来看一看 Chrome 扩展的更新逻辑:

扩展各部分 是否需要更新扩展
manifest.json Yes
background service worker Yes
content scripts Yes (并且需要刷新 Web 页面)
action popup No
options page No
Other extension HTML pages No

更新 Chrome 扩展意味着需要打开扩展管理界面(chrome://extensions),点击扩展的更新按钮,如下图:

如果每次改动代码,都需要这样操作一遍,才能看到效果,那也太痛苦了吧 ,尤其是 content scripts,更新完扩展后还要去浏览器页签刷新页面,这极大的拉低开发效率和消磨人的耐心。

仔细想想想,目前前端项目开发已经有 HMR 热重载技术,在开发 Web 页面时可以实时查看效果,极大的提升了开发体验。那么,能否把这种极致的体验带到 Chrome 扩展开发中来呢?经过多番折腾探索,还真让我搞出来啦

感谢 vite

vite 作为下一代的前端工具链,用过的都说好 。

vite 为各种技术栈提供了模板:

JavaScript TypeScript
vue vue-ts
react react-ts
vanilla vanilla-ts
preact preact-ts
lit lit-ts
svelte svelte-ts
solid solid-ts
qwik qwik-ts

vite 生成的项目将开箱支持:

  • TypeScript
  • html 的 HMR

用 vite 新建一个 Chrome 扩展项目,其 HMR 支持情况将如下:

扩展各部分 是否需要更新扩展 HMR
manifest.json Yes
background service worker Yes
content scripts Yes (并且需要刷新 Web 页面)
action popup No
options page No
Other extension HTML pages No

感谢 @crxjs/vite-plugin

@crxjs/vite-plugin 是一个 vite 插件,旨在帮助开发者使用现代 web 开发技术开发 Chrome 扩展。

使用起来也是非常简单:

npm i @crxjs/vite-plugin@beta -D

在 vite.config.ts 中增加如下配置:

import { defineConfig } from "vite"
import { crx } from "@crxjs/vite-plugin"
import manifest from "./manifest" export default defineConfig({
plugins: [crx({ manifest })],
})

@crxjs/vite-plugin 通过解析 manifest 清单文件,找到扩展里相关的所有文件资源进行编译打包。

在配置完之后,项目将获得以下特性:

  • manifest 不再须要是 json 文件,可以是 js 或 ts 文件!简直不要太方便

  • 全方位 HMR

    扩展各部分 是否需要更新扩展 HMR
    manifest.json Yes
    background service worker Yes
    content scripts Yes (并且需要刷新 Web 页面)
    action popup No
    options page No
    Other extension HTML pages No

demo 项目源码 create-crx 我已经放在 GitHub 上,觉得不错可以 点个小星星 支持一下哦

打造一个极度舒适的Chrome扩展项目开发环境的更多相关文章

  1. Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试

    Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试   需要FQ才能安装,使用时应该不用FQ了,除非使用postman的历史记录功能:   非常棒的C ...

  2. 打造一个高逼格的android开源项目——小白全攻略 (转)

    转自:打造一个高逼格的android开源项目 小引子 在平时的开发过程中,我们经常会查阅很多的资料,最常参考的是 github 的开源项目.通常在项目的主页面能看到项目的简介和基本使用,并且时不时能看 ...

  3. 了解Chrome扩展程序开发--摘抄

    了解Chrome扩展程序开发 2018-01-11 边城到此莫若 鸡蛋君说前端 首先,我尝试来用简单几句话描述一下Chrome扩展程序: Chrome扩展主要用于对浏览器功能的增强,它强调与浏览器相结 ...

  4. Chrome扩展,应用开发学习笔记之2---恶搞百度一下

    Chrome扩展,应用开发学习笔记之2 恶搞百度一下 前面我们介绍了一个最简单的chrome扩展时钟,如今我来介绍一下一个恶搞百度一下的chrome扩展程序. 前面说过,manifest.json文件 ...

  5. 使用Sublime text 3打造一个小巧但强大的Go语言开发IDE

    版权声明:欢迎转载,转载请注明出处! https://blog.csdn.net/iTaacy/article/details/76716049 使用Sublime text 3打造一个小巧但强大的G ...

  6. 翻译:打造基于Sublime Text 3的全能python开发环境

    原文地址:https://realpython.com/blog/python/setting-up-sublime-text-3-for-full-stack-python-development/ ...

  7. 抛弃强大的TFS ,借助于BugTracker.NET + Visual Source Safe + SourceLink搭建项目开发环境

    微软公司的Team Foundation Server是个强大的项目管理工具,如果用.NET开发,它应该是首选的项目管理平台.TFS的成本比较高,而且和Visual Studio集成紧密.比如TSF有 ...

  8. iOS项目——项目开发环境搭建

    在开发项目之前,我们需要做一些准备工作,了解iOS扩展--Objective-C开发编程规范是进行开发的必备基础,学习iOS学习--Xcode9上传项目到GitHub是我们进行版本控制和代码管理的选择 ...

  9. Java进击C#——项目开发环境

    本章简言 上一章我们了解一下开发环境,知道了什么去新建一个项目工程.却并没有去项目工程进行介绍.可是之后我们会常常跟项目工程打交道.所以这章笔者就对项程工程的常用的一些功能进行讲解.当然说全面那是不可 ...

  10. Hadoop项目开发环境搭建(Eclipse\MyEclipse + Maven)

    写在前面的话 可详细参考,一定得去看 HBase 开发环境搭建(Eclipse\MyEclipse + Maven) Zookeeper项目开发环境搭建(Eclipse\MyEclipse + Mav ...

随机推荐

  1. Java 设计模式实战系列—单例模式

    本文首发公众号:小码A梦 单例模式是设计模式中最简单一个设计模式,该模式属于创建型模式,它提供了一种创建实例的最佳方式. 单例模式的定义也比较简单:一个类只能允许创建一个对象或者实例,那么这个类就是单 ...

  2. 1.15 自实现GetProcAddress

    在正常情况下,要想使用GetProcAddress函数,需要首先调用LoadLibraryA函数获取到kernel32.dll动态链接库的内存地址,接着在调用GetProcAddress函数时传入模块 ...

  3. vscod 配置 morkdown 快捷键

    vscod 配置 morkdown 快捷键 1.首先在根目录添加.vscode 文件夹 ️1.1 新建一个 settings.json 文件 { "[markdown]": { & ...

  4. crypto 加解密库简介与测试【GO 常用的库】

    〇.前言 GO 语言的标准库 crypto 提供了一组用于加密和解密的包,包括对称加密.哈希函数.数字签名.随机数生成等功能.在日常开发中,通过使用这些库,可以确保数据的安全性和完整性. 对于使用频率 ...

  5. 【爬虫笔记】Python爬虫简单运用爬取代理IP

    一.前言 近些年来,网络上的爬虫越来越多,很多网站都针对爬虫进行了限制,封禁了一些不规则的请求.为了实现正常的网络爬虫任务,爬虫常用代理IP来隐藏自己的真实IP,避免被服务器封禁.本文将介绍如何使用P ...

  6. Java 21的StringBuilder和StringBuffer新增了一个repeat方法

    发现Java 21的StringBuilder和StringBuffer中多了repeat方法: /** * @throws IllegalArgumentException {@inheritDoc ...

  7. 全局重写Element UI中的Message消息提示显示时长

    需求:Message消息提示显示时长过长 环境:"vue": "2.6.12"."element-ui": "^2.15.6&qu ...

  8. oracle监听配置与防火墙问题

    在建好pdb容器后,需配置网络,才能从客户端连接服务器端 1.首先查看pdb容器的服务名 lsnrctl status ... Service "19cdb" has 1 inst ...

  9. APP攻防--反模拟器&反代理&反证书&真机逃逸&XP框架&Frida技术

    APP攻防--反模拟器&反代理&反证书&真机逃逸&XP框架&Frida技术 APP抓包技术 关于APP抓包,使用burpsuite抓模拟器中的数据包,需要将模拟 ...

  10. ACL 与NAT

    ACL 概述 acl是由一系列permit或deny语句组成.有序规则的列表. ACL是一个匹配工具,能够对报文进行匹配和区分. 应用 匹配流量 在traffic-filter中备调用 在NAT中被调 ...