打造一个极度舒适的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 ...
随机推荐
- Jmeter逻辑控制器Switch Controller的用法
一.概述 类似编程语言中的switch函数,Switch Controller根据给定的值n(可使用变量)选择执行其下的 第n+1个子节点. 作用:Switch Controller通过给该控制器中的 ...
- 获取API接口返回的商品详情数据后该如何使用
获取API接口返回的商品详情数据后,我们可以使用以下方式将其处理和利用: 数据展示:我们可以将API接口返回的商品详情数据以列表.表格.图形等形式展示给用户,以便他们更好地了解商品的基本信息.特征.评 ...
- [TSG开发日志](一)软件基础框架
目录 前言 说明 框架 TSG_Framework 一.底层信号机制 TSG_Caller 二.参数类型声明 TSG_Params 三.设备类声明 TSG_Device 四.设备配置文件控制 TSG_ ...
- QA|如何获取元素属性值|网页计算器自动化测试实战
一般来说 类似于<value>123</value>这样的元素,我们获取元素值是用.text获取,但有时这个值不是写在这里,而是作为标签的属性值写进去的,此时我们就需要获取属性 ...
- 什么是IP协议?
简介: IP(Internet Protocol)协议,又称网际协议,是TCP/IP协议的核心.它负责Internet上网络之间的通信,并规定了将数据报从一个网络传输到另一个网络所应遵循的规则.具体来 ...
- 【python】python开源代理ip池
一.前言 随着互联网的不断发展,越来越多的应用需要使用高匿代理IP才能访问目标网站,而代理IP作为一种能够隐藏本机真实IP地址的工具,在网络抓取.搜索引擎排名.广告投放.反爬虫等方面有着广泛的应用场景 ...
- Nuxt.js 生成sitemap站点地图文件
Nuxt.js 生成sitemap站点地图文件 背景介绍 使用nuxt框架生成静态文件支持SEO优化,打包之后需要生成一个 sitemap.xml 文件方便提交搜索引擎进行收录.官网有提供一个插件 ...
- 13. 用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP中的压缩gzip,deflate,brotli算法
用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP中的压缩gzip,deflate,brotli算法 项目 ++wmproxy++ gite: https://gitee.com/ ...
- 【羚珑AI智绘营】分分钟带你拿捏SD中的色彩控制
导言 颜色控制一直是AIGC的难点,prompt会污染.img2img太随机- 今天带来利用controlnet,实现对画面颜色的有效控制.都说AIGC是抽卡,但对把它作为工具而非玩具的设计师,必须掌 ...
- 苹果电脑开不了机,mac时间机器备份加速,以及识别不到u盘的方法
平淡无奇的一天,上班后,我按照正常流程,揭开我亲爱的mac的盖子.屏幕没有如昨天一样照亮我的脸庞,擦,电用完了吗? 我充上电,半小时后,电池都热了,依然开不了机.打售后电话,售后姐姐亲切的指导各种我使 ...