打造一个极度舒适的Chrome扩展项目开发环境
大家好,我是 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扩展项目开发环境的更多相关文章
- Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试
Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试 需要FQ才能安装,使用时应该不用FQ了,除非使用postman的历史记录功能: 非常棒的C ...
- 打造一个高逼格的android开源项目——小白全攻略 (转)
转自:打造一个高逼格的android开源项目 小引子 在平时的开发过程中,我们经常会查阅很多的资料,最常参考的是 github 的开源项目.通常在项目的主页面能看到项目的简介和基本使用,并且时不时能看 ...
- 了解Chrome扩展程序开发--摘抄
了解Chrome扩展程序开发 2018-01-11 边城到此莫若 鸡蛋君说前端 首先,我尝试来用简单几句话描述一下Chrome扩展程序: Chrome扩展主要用于对浏览器功能的增强,它强调与浏览器相结 ...
- Chrome扩展,应用开发学习笔记之2---恶搞百度一下
Chrome扩展,应用开发学习笔记之2 恶搞百度一下 前面我们介绍了一个最简单的chrome扩展时钟,如今我来介绍一下一个恶搞百度一下的chrome扩展程序. 前面说过,manifest.json文件 ...
- 使用Sublime text 3打造一个小巧但强大的Go语言开发IDE
版权声明:欢迎转载,转载请注明出处! https://blog.csdn.net/iTaacy/article/details/76716049 使用Sublime text 3打造一个小巧但强大的G ...
- 翻译:打造基于Sublime Text 3的全能python开发环境
原文地址:https://realpython.com/blog/python/setting-up-sublime-text-3-for-full-stack-python-development/ ...
- 抛弃强大的TFS ,借助于BugTracker.NET + Visual Source Safe + SourceLink搭建项目开发环境
微软公司的Team Foundation Server是个强大的项目管理工具,如果用.NET开发,它应该是首选的项目管理平台.TFS的成本比较高,而且和Visual Studio集成紧密.比如TSF有 ...
- iOS项目——项目开发环境搭建
在开发项目之前,我们需要做一些准备工作,了解iOS扩展--Objective-C开发编程规范是进行开发的必备基础,学习iOS学习--Xcode9上传项目到GitHub是我们进行版本控制和代码管理的选择 ...
- Java进击C#——项目开发环境
本章简言 上一章我们了解一下开发环境,知道了什么去新建一个项目工程.却并没有去项目工程进行介绍.可是之后我们会常常跟项目工程打交道.所以这章笔者就对项程工程的常用的一些功能进行讲解.当然说全面那是不可 ...
- Hadoop项目开发环境搭建(Eclipse\MyEclipse + Maven)
写在前面的话 可详细参考,一定得去看 HBase 开发环境搭建(Eclipse\MyEclipse + Maven) Zookeeper项目开发环境搭建(Eclipse\MyEclipse + Mav ...
随机推荐
- ORM分组查询复杂查询
记录一下自己在工作中遇到的一个问题,就是根据一个字段分类,然后还要统计这个字段不同状态的数量,这里我举个例子 假如有好多学生,这些学生来自不同的班级,现在我们要统计每一个班级中男生和女生的数量 def ...
- 一文了解Validator库
1. 引言 github.com/go-playground/validator 是一个 Go 语言的库,用于对结构体字段进行验证.它提供了一种简单而灵活的方式来定义验证规则,并在验证过程中检查结构体 ...
- minio 支持object搜索方案
minio支持上传时对object打标签,查询时可以根据标签做筛选.但是有ftp上传文件的需求,导致无法给object打标签.并且也不清楚minio对于根据标签的筛选性能如何,因此我们打算将objec ...
- Vue2系列(lqz)——slot插槽 (内容分发)、2 transition过渡、3 生命周期、4 swiper学习、5 自定义组件的封装、6 自定义指令、7 过滤器
文章目录 1 slot插槽 (内容分发) 1.1 基本使用 1.2 插槽应用场景1 1.3 插槽应用场景2 1.4 具名插槽 2 transition过渡 3 生命周期 4 swiper学习 5 自定 ...
- MediaRecorder test
public class MediaRecorder extends Object java.lang.Object ↳ android.media.MediaRecorder Class Ov ...
- 文心一言 VS 讯飞星火 VS chatgpt (112)-- 算法导论10.2 3题
三.用go语言,用一个单链表L实现一个队列.要求操作 ENQUEUE 和 DEQUEUE 的运行时间仍为O(1). 文心一言: 在 Go 语言中,使用单链表实现队列的操作,包括入队(ENQUEUE)和 ...
- 【docker简略学习】
[docker简略学习] Docker是一个应用打包.分发.部署工具,相当于一个轻量级虚拟机.相比较VM虚拟机,可移植性更强. 一.Docker安装 下载链接:https://docs.docker. ...
- vscode编写keil工程项目
vscode 前言 1 安装vscode 2 安装插件 2.1 设置中文 2.2 安装Keil Assistant 2.3 常用安装 3 快捷键 前言 我使用vscode只是用来为了弥补keil编写的 ...
- [学习笔记]TypeScript查缺补漏(二):类型与控制流分析
@ 目录 类型约束 基本类型 联合类型 控制流分析 instanceof和typeof 类型守卫和窄化 typeof判断 instanceof判断 in判断 内建函数,或自定义函数 赋值 布尔运算 保 ...
- 用结构化思维解一切BUG(2):实践原则
背景 本文是系列文章<用结构化思维解一切BUG>的第二篇.本系列文章主要介绍一种「无需掌握技术细节,只需结构化思维和常识即可解一切BUG的方法」. 在前序文章<用结构化思维解一切BU ...