• Stars
    star
    318
  • Rank 131,872 (Top 3 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created about 5 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Use react + typescript + webpack to enhance your chrome extension development experience

awesome-chrome-extension-boilerplate

Build Status Known Vulnerabilities Percentage of issues still open

一个超棒的基于 React & TypeScript & webpack 的 chrome 扩展开发模板

manifest v3 版本 👉 manifest-v3

特性

  • 🔥 支持修改 content scripts 代码自动重载扩展和刷新注入了 content scripts的页面,再也不用修改了 content scripts 后手动刷新扩展和页面了。
  • 🌴 optionspopup 页面支持 react hot reload & react devtools,充分享受现代前端工程化的便捷,让你从开发 SPA 无缝切换到 chrome 扩展开发。
  • 🛡️ 整个模板包括 webpack 配置都是用 TypeScript 编写的,使用 TypeScript 配置 webpack 减少查阅文档和手残的概率。
  • 💄 ​ 支持 css/less/sass,使用 mini-css-extract-plugin 将 CSS 分离成 content CSS Script。
  • ⚒️ 集成了社区很多的优秀的 webpackeslintbabel 插件,优化开发,构建和打包分析体验,还配置了 husky , format-imports, stylelint, travisaudit-ci 构建工具。
  • 🌈 默认集成了 jquerylodashantd 等常用工具库,并对它们的打包进行了优化

📦 安装

# 克隆这个模板
git clone https://github.com/tjx666/awesome-chrome-extension-boilerplate.git

# 安装依赖,推荐使用 pnpm
pnpm

🛠️ 开发

🔔 请确保你对 chrome 扩展开发已经有基本的了解,入门推荐:Chrome 插件(扩展)开发全攻略。如果你对项目的配置有疑问。

准备工作

修改清单文件

在 src 目录下有两个清单文件:manifest.dev.jsonmanifest.prod.json,分别是开发环境和生产环境的配置文件。

注意:任何注入了 content scripts 的页面也必须被注入 js/all.jscss/all.css ,为了实现这一点,它俩的 matches 应该是其它所有 content scriptsmatches 的父集。

示例的配置是:

"content_scripts": [
    // 所有注入了 content scripts 的页面都注入了 js/all.js 和 css/all.css
    {
        "matches": ["https://github.com/*"],
        "css": ["css/all.css"],
        "js": ["js/all.js"]
    },
    // 注入到 github pull requests 页面
    {
        "matches": ["https://github.com/pulls"],
        "css": ["css/pulls.css"],
        "js": ["js/pulls.js"]
    }
]

添加静态资源

public 下的文件会被打包到扩展的根目录,manifest 中用到的图标等资源可以直接放到 public 文件夹下面。模板在 public/icons 放了一些默认的图标,因此可以在 manifest 中这样引用图标:

// manifest.dev.json
{
  "icons": {
    "16": "icons/extension-icon-x16.png",
    "32": "icons/extension-icon-x32.png",
    "48": "icons/extension-icon-x48.png",
    "128": "icons/extension-icon-x128.png"
  }
}

启动 devServer

yarn start

无论是开发环境还是生产环境都会在项目根目录生成 extension 文件夹,chrome 访问 chrome://extensions/ 也就是扩展管理页面,点击右上角的按钮开启开发者模式,选择加载已解压的扩展程序,再选择刚刚生成的 extension 文件夹即可加载扩展。

load extension

由于 chrome 的限制,官方的 chrome 扩展 react devtools 并不能审查 chrome-extension:// 协议的页面如 optionspopup 页面。所以需要使用独立的 react devtools,使用下面的命令启动 devServer 的同时打开独立的 devtools 窗口:

npm run devtools

react devtools

你可以通过 open 参数配置在 webpack 初次编译成功打开某个 URL:

"scripts": {
        "start": "cross-env-shell NODE_ENV=development ts-node --files -P ./server/tsconfig.json ./server --open=https://xxx.xxx.com",
    },

编写代码

模板默认的代码实现的功能是修改 github 导航栏的颜色,模板使用了 normalize.css 和一些自定义样式对 CSS 进行样式重置。

background

如果你想开发 background 脚本,你可以在 src/background 文件夹编写你的代码。src/background/index.tsbackground 脚本的入口,也是 webpack 的一个 entry,其它像 optionspopup 页面也类似。你可以查看 webpackentry 配置: src/server/utils/entry.ts 了解更多实现细节。

optionspopup

它俩的 webpack entry 分别是 src/options/index.tsxsrc/popup/index.tsx。这两个页面很相似,都只是一个普通的 web 页面,因此你可以像开发一个 react SPA 一样开发它们。

这个模板使用了 react 的最新版本,因此你可以使用 react hooks 去开发函数组件,react hookseslint 规则也集成了。

模板使用 React Fast Refresh 支持 react 的热更新。

content scripts

这个模板会扫描 src/contents 文件夹,将所有子文件夹中的 index.tsxindex.ts 作为 webpack entry

content scripts 都放在 src/contents 目录下。默认有个 all.ts,也是个 webpack entry,它不能被删除,因为这个 webpack entry 被用于注入实现 chrome 扩展自动刷新功能的补丁。

举个 🌰:

当你要给 URL 是 https://www.example.com/discuss 页面开发 content script,你需要做下面两步:

  1. 添加 content scripts 和页面 URL 之间的映射到 manifest.dev.jsonmanifest.prod.json:

    "content_scripts": [
        {
            "matches": ["https://www.example.com/discuss*"],
            "css": ["css/discuss.css"],
            "js": ["js/discuss.js"]
        }
    ],
  2. 创建一个和上面 content script 路径对应的文件夹 src/contents/discusssrc/discuss/index.tsx 或者 src/discuss/index.ts 将会被视为一个 webpack entry。 webpack 会通过这个 entry 最终产出 js/discuss.js 这个 chunk

    mini-css-extract-plugin 会将所有被 discuss/index.ts 导入的样式文件合并再分离到 extension/css/discuss.css,这也是为什么上面的 manifest 中 content CSS script 可以使用 css/discuss.css 的原因

dev server 代理

你可以在 server/configs/proxy.ts 中配置 dev server 的代理,所有向 dev server 发送的请求都会根据你配置的规则被代理转发,修改配置后需要重启 dev server 才会生效,更多细节请查看使用的中间件 http-proxy-middleware

const proxyTable: ProxyTable = {
  // 如果 devServer 启动地址是 http://127.0.0.1:3600
  // 那么请求 http://127.0.0.1:3600/path_to_be_proxy 将会被 dev server 转发到 http://target.domain.com/path_to_be_proxy
  '/path_to_be_proxy': { target: 'http://target.domain.com', changeOrigin: true },
};

👷 打包

构建生产级别的包直接运行:

pnpm build

如果你想分析打包情况:

pnpm build-analyze

📢 注意事项

src/allsrc/background 下的文件包含了实现修改 content script 自动重载扩展和刷新注入了 content script 页面的功能的代码。除非你不开发 content scripts,否则,不能删除它

📚 Blog

核心原理:使用 webpack 构建 chrome 扩展的热更新问题

🎯 TODO

  • 给 manifest.json 增加 JSON 校验,目前使用的是 SchemaStore 提供的 schema,有极少部分内容已经过时了,有时间要去提个 PR。
  • 支持 webpack dev server 代理
  • 针对 chrome 扩展本身是个多页面应用的特点,提取多个页面的公共依赖到单独的 chunk

🤝 贡献 PRs Welcome

欢迎提交 PRs 和 issues。

More Repositories

1

react-typescript-boilerplate

An awesome boilerplate for react + typescript development made with love
TypeScript
95
star
2

unplugin-detect-duplicated-deps

Detect duplicate packaged dependencies
TypeScript
74
star
3

user-scripts

自用的一些油猴脚本
JavaScript
67
star
4

deep-in-fe

explore front-end mystery 前端探秘
JavaScript
54
star
5

vscode-extension-boilerplate

An awesome boilerplate for VSCode extension development 🚀
TypeScript
38
star
6

open-in-external-app

Open file with external application in VSCode
TypeScript
37
star
7

koa-restful-boilerplate

A boilerplate for koa2 RESTful API development
JavaScript
31
star
8

awesome-vscode-extension-boilerplate

the best vscode extension boilerplate 🚀🚀🚀
TypeScript
22
star
9

package-manager-enhancer

A vscode extension enhance package manager ability
TypeScript
19
star
10

coo

[Deprecated] coo is a cross-platform chat application
TypeScript
19
star
11

refined-nowcoder

牛客网 chrome 扩展
TypeScript
19
star
12

cep-react-webpack-boilerplate

An awesome cep extension boilerplate with excellent development experience
JavaScript
14
star
13

leetcode-javascript

leetcode with javascript
JavaScript
12
star
14

Spiders

我写的一些爬虫程序
JavaScript
11
star
15

view-github-repository

Open npm package GitHub repository straight from VScode
TypeScript
11
star
16

astro-blog

my blog source code
Astro
10
star
17

react-hooks

Study hooks by implementing them.
TypeScript
10
star
18

vscode-webview-webpack-hmr-example

VSCode Extension Webview Powered by Webpack HMR
JavaScript
10
star
19

electron-vue-vite-boilerplate

TypeScript
9
star
20

reload-can-solve-any-problems

TypeScript
9
star
21

tjx666.github.io

My blog website static files powered by hexo
HTML
9
star
22

vscode-adobe-extension-devtools

provide some useful tools for adobe extension development
JavaScript
9
star
23

vite-plugin-semantic-chunks

generate semantic chunks
TypeScript
8
star
24

xianyu-server

使用 springBoot + mybatis 开发我的模仿闲鱼 app 的项目 restful api 后台
Java
7
star
25

webpack-open-browser

A webpack plugin supports opening browser when webpack loads
TypeScript
7
star
26

xianyu

使用 react 作为 ui 框架高仿咸鱼 app
JavaScript
7
star
27

blog

存放 2022 年新写的博客
TypeScript
7
star
28

js-handwriting-2022

js 手写题 2022 版
JavaScript
7
star
29

vscode-archive

compress/decompress for .zip, .vsix, .crx(v3), .asar, .tgz, .gzip, .br, .tar
TypeScript
7
star
30

vscode-fe-helper

Provide some useful tools for front end development
HTML
7
star
31

ts-perf-issue

Why MUI make Typescript slow?
TypeScript
7
star
32

recycle

使用 react hooks 开发的电子产品回收网站
JavaScript
6
star
33

eslint-config

self use eslint config
JavaScript
6
star
34

scripting-listener

Switch and Log Viewer for Photoshop Scripting Listener
TypeScript
6
star
35

vote

一个简单的投票小程序
JavaScript
5
star
36

fetch-github-trending

fetch github trending easily
TypeScript
5
star
37

open-related-websites

TypeScript
5
star
38

power-edit

a vscode extension enhance edit experience
TypeScript
5
star
39

mini-shop

The client of mini-shop.
TypeScript
5
star
40

check-fe-env

keep a consistent development environment between different developers
TypeScript
5
star
41

koa-server-boilerplate

koa2 服务器模板,集成各种实用的中间件和功能
JavaScript
4
star
42

coo-server

coo-server is a chat server written by koa2 and socket.io
JavaScript
4
star
43

fe-algorithm

some algorithm questions often asked in frontEnd interviews
TypeScript
4
star
44

prettier-config

my personal prettier config
JavaScript
3
star
45

neo-vue-helper

some tools for vue project
TypeScript
3
star
46

better-colorizer

a vscode extension to support syntax highlight for git error file and output panel
TypeScript
3
star
47

leetcode_cpp

C++
3
star
48

zhihu-faker

使用 flutter 仿知乎 app
Dart
3
star
49

leetcode-javascript-2023

每逢面试必刷题
JavaScript
3
star
50

typescript-notes

My typescript notes
TypeScript
3
star
51

webpack-configuration

学习 webpack 配置
JavaScript
3
star
52

vscode-webview-extension-boilerplate

An awesome boilerplate for VSCode webview extension development 🚀
TypeScript
3
star
53

version-lens

modified from https://gitlab.com/versionlens/vscode-versionlens
TypeScript
3
star
54

dart-notes

Dart 学习笔记
Dart
3
star
55

vscode-neo-file-utils

VSCode file utils
TypeScript
3
star
56

vue3-study-notes

Vue
2
star
57

vscode-clipboard-master

VSCode Copy/Paste Enhancer
TypeScript
2
star
58

unplugin-externalize-deps

externalize dependencies from production build
TypeScript
2
star
59

ideas

some ideas I want to do
2
star
60

eslint-plugin-extendscript-plus

eslint plugin for adobe cep extensions and extendscript
JavaScript
2
star
61

koa2-illustrate-server

Koa2 演示服务器
JavaScript
2
star
62

react-file-explorer

在浏览器内管理本地文件
TypeScript
2
star
63

unplugin-starter

unplugin boilerplate for personal use
TypeScript
2
star
64

react-native-notes

react native 学习笔记
JavaScript
2
star
65

vscode-regexp-tools

some useful tools about regexp
TypeScript
2
star
66

java-notes

关于java的一些笔记和测试
Java
2
star
67

cep-hello-world

HTML
2
star
68

find-similar-packages

find function similar packages in pnpm monorepo project
TypeScript
2
star
69

vite-plugin-inspect-config

inspect vite resolved config with infinite object level
TypeScript
2
star
70

release

A personal use release tool for generating changelog and bump.
TypeScript
1
star
71

es6plus-notes

My ECMAScript 6 study notes
JavaScript
1
star
72

modify-file-warning

A vscode extension which is useful when modify file under node_modules accidentally
TypeScript
1
star
73

vite-issue-reproduce

JavaScript
1
star
74

adobe-devtools

A CEP extension for adobe extension developer
JavaScript
1
star
75

pnpm-postinstll-script-ansi-issue

JavaScript
1
star
76

vite-antv

Vue
1
star
77

flutter_mc_order

Dart
1
star
78

stylelint-config

my personal shareable stylelint config
JavaScript
1
star
79

react-webpack-boilerplate

use modern tech to configure react + webpack
TypeScript
1
star
80

react-rspack-boilerplate

react boilerplate powered by rspack🚀.
TypeScript
1
star
81

vite-plugin-esm-issue

Vue
1
star
82

leetcode-js-2022

二刷 leetcode
JavaScript
1
star
83

scoringSystem

使用 react native 开发的企业评分 app
JavaScript
1
star
84

leetcode_rust

Using rust to fuck LeetCode!
Rust
1
star
85

ae-extendscript-demos

JavaScript
1
star
86

vscode-versionlens

backup -> https://gitlab.com/versionlens/vscode-versionlens
TypeScript
1
star
87

learn-git

JavaScript
1
star
88

vite-plugin-print-info

print some help info like vite builtin
TypeScript
1
star
89

awesome

awesome!
1
star
90

raspberry-pie-ht

JavaScript
1
star
91

vite-plugin-css-injected-by-js-issue

TypeScript
1
star
92

resume

looking for a frond-end job...
1
star
93

vscode-classic-experience

Restore familiar VSCode keybindings in Cursor editor. Smooth transition for VSCode users.
TypeScript
1
star