ChatHub扩展程序开发与构建指南
【免费下载链接】chathub All-in-one chatbot client 项目地址: https://gitcode.com/gh_mirrors/ch/chathub
本文详细介绍了ChatHub扩展程序的完整开发与构建流程,涵盖了Chrome扩展manifest配置详解、Vite + React + TypeScript开发环境搭建、扩展程序打包与发布流程,以及多语言国际化实现方案。通过现代化的Manifest V3规范和最佳实践,展示了如何构建功能强大且用户友好的浏览器扩展。
Chrome扩展manifest配置详解
ChatHub作为一个功能强大的多AI聊天机器人聚合客户端,其manifest配置采用了现代化的Manifest V3规范,充分展示了现代Chrome扩展开发的最佳实践。让我们深入解析这个配置文件的各个关键部分。
基础配置信息
manifest_version: 3,
name: '__MSG_appName__',
description: '__MSG_appDesc__',
default_locale: 'en',
version: '1.45.7',
版本控制:采用Manifest V3,这是Chrome扩展的最新标准,提供了更好的安全性和性能。版本号遵循语义化版本控制,便于用户理解更新内容。
国际化支持:通过__MSG_appName__和__MSG_appDesc__占位符实现多语言支持,实际文本存储在_locales目录下的各个语言文件中。
图标资源配置
icons: {
'16': 'src/assets/icon.png',
'32': 'src/assets/icon.png',
'48': 'src/assets/icon.png',
'128': 'src/assets/icon.png',
},
图标配置采用单一图片文件适配不同尺寸,确保在各种界面(扩展栏、商店页面、设置页面)中都能清晰显示。
后台服务配置
background: {
service_worker: 'src/background/index.ts',
type: 'module',
},
Service Worker架构:使用TypeScript编写的模块化service worker,取代了传统的background scripts,提供更好的性能和资源管理。
后台服务主要负责:
- 扩展安装时的初始化逻辑
- 快捷键命令处理
- 跨标签页通信协调
- Twitter CSRF令牌读取等核心功能
权限管理系统
权限配置是manifest的核心部分,ChatHub采用了精细化的权限控制策略:
host_permissions: [
'https://*.bing.com/',
'https://*.openai.com/',
'https://bard.google.com/',
// ... 其他AI服务域名
],
optional_host_permissions: ['https://*/*', 'wss://*/*'],
permissions: [
'storage',
'unlimitedStorage',
'sidePanel',
'declarativeNetRequestWithHostAccess',
'scripting'
],
权限配置采用了分层策略:
必需主机权限:精确指定了需要访问的AI服务域名,包括Bing、OpenAI、Google Bard等,避免了过度授权。
可选主机权限:提供了https://*/*和wss://*/*的通配符权限,用于支持Web搜索功能和WebSocket连接,用户可以选择性授予。
功能权限:
storage和unlimitedStorage:用于本地数据持久化存储sidePanel:侧边栏面板功能declarativeNetRequestWithHostAccess:声明式网络请求修改scripting:脚本注入和执行能力
内容脚本配置
content_scripts: [
{
matches: ['https://chat.openai.com/*'],
js: ['src/content-script/chatgpt-inpage-proxy.ts'],
},
],
内容脚本仅在ChatGPT网站中注入,实现了页面级别的代理功能,为与ChatGPT网页版的深度集成提供了技术支持。
快捷键命令系统
commands: {
'open-app': {
suggested_key: {
default: 'Alt+J',
windows: 'Alt+J',
linux: 'Alt+J',
mac: 'Command+J',
},
description: 'Open ChatHub app',
},
},
提供了跨平台的快捷键支持(Alt+J或Command+J),用户可以在任何页面快速唤出ChatHub应用,极大提升了使用便捷性。
侧边栏面板配置
side_panel: {
default_path: 'sidepanel.html',
},
侧边栏功能是现代Chrome扩展的重要特性,允许用户在浏览网页的同时使用ChatHub,实现了真正的多任务处理体验。
声明式网络请求规则
declarative_net_request: {
rule_resources: [
{
id: 'ruleset_bing',
enabled: true,
path: 'src/rules/bing.json',
},
// ... 其他规则集
],
},
声明式网络请求是Manifest V3的重要特性,ChatHub为每个支持的AI服务配置了专门的请求修改规则:
以Bing规则为例,规则配置为:
{
"id": 1,
"priority": 1,
"action": {
"type": "modifyHeaders",
"requestHeaders": [
{
"header": "origin",
"operation": "set",
"value": "https://www.bing.com"
},
{
"header": "referer",
"operation": "set",
"value": "https://www.bing.com"
}
]
},
"condition": {
"urlFilter": "bing",
"resourceTypes": ["xmlhttprequest", "websocket"]
}
}
这种配置确保了与各个AI服务的API通信能够正常进行,解决了跨域请求的安全限制问题。
配置最佳实践总结
ChatHub的manifest配置体现了现代Chrome扩展开发的多个最佳实践:
- 最小权限原则:精确控制所需权限,避免过度授权
- 模块化设计:使用TypeScript和模块化架构
- 国际化支持:完整的多语言解决方案
- 性能优化:采用Service Worker和声明式网络请求
- 用户体验:快捷键和侧边栏等便捷功能
这种配置方式不仅确保了扩展的功能完整性,还提供了优秀的用户体验和安全保障,为开发者提供了一个高质量的参考范例。
Vite + React + TypeScript开发环境搭建
ChatHub作为一个现代化的浏览器扩展项目,采用了Vite + React + TypeScript的技术栈,为开发者提供了极致的开发体验和构建性能。本节将详细介绍如何搭建完整的开发环境,包括项目初始化、依赖配置、构建工具设置以及开发工作流的优化。
项目初始化与依赖管理
ChatHub使用Yarn作为包管理器,项目配置了完整的TypeScript和现代前端工具链。首先需要安装项目依赖:
# 安装项目依赖
yarn install
# 或使用npm
npm install
项目的主要开发依赖包括:
| 依赖包 | 版本 | 作用 |
|---|---|---|
| vite | 4.5.1 | 构建工具和开发服务器 |
| @vitejs/plugin-react | ^4.2.1 | React插件支持 |
| typescript | ^5.3.3 | TypeScript编译器 |
| @crxjs/vite-plugin | 2.0.0-beta.21 | Chrome扩展构建插件 |
| tailwindcss | ^3.4.0 | CSS框架 |
TypeScript配置详解
ChatHub的TypeScript配置位于tsconfig.json中,针对现代浏览器和React开发进行了优化:
{
"compilerOptions": {
"target": "ESNext",
"lib": ["DOM", "DOM.Iterable", "ESNext"],
"strict": true,
"module": "ESNext",
"moduleResolution": "node",
"jsx": "react-jsx",
"baseUrl": ".",
"paths": {
"~*": ["./src/*"]
},
"types": ["chrome-types"]
}
}
关键配置说明:
target: ESNext:使用最新的ECMAScript特性jsx: react-jsx:使用React 17+的新JSX转换paths配置:支持路径别名,简化导入路径types: ["chrome-types"]:包含Chrome扩展API的类型定义
Vite构建配置
Vite配置文件vite.config.ts集成了多个插件,为扩展开发提供完整支持:
export default defineConfig(({ mode }) => {
return {
plugins: [
tsconfigPaths(),
react({
babel: {
plugins: [jotaiDebugLabel, jotaiReactRefresh],
},
}),
crx({ manifest }),
],
build: {
rollupOptions: {
input: ['app.html'],
},
},
server: {
strictPort: true,
port: 5173,
hmr: {
clientPort: 5173,
},
},
}
})
配置特点:
- 使用
@crxjs/vite-plugin处理Chrome扩展manifest - 集成Jotai状态管理的Babel插件
- 开发服务器固定端口5173,支持HMR热更新
- 生产构建时自动移除console和debugger
样式处理配置
项目采用PostCSS处理样式,配置在postcss.config.cjs中:
module.exports = {
plugins: {
'postcss-import': {},
'tailwindcss/nesting': 'postcss-nesting',
tailwindcss: {},
autoprefixer: {},
},
}
样式处理流程:
开发脚本与工作流
package.json中定义了开发相关的脚本命令:
{
"scripts": {
"dev": "vite",
"build": "tsc && vite build"
}
}
开发工作流程:
环境变量与配置管理
项目通过Vite的环境变量机制管理不同环境的配置:
// 环境检测工具
export const isDev = import.meta.env.DEV
export const isProd = import.meta.env.PROD
开发环境特色功能:
- 快速冷启动:Vite的ESM原生支持确保秒级启动
- 即时HMR:React组件热更新,保持状态不丢失
- 按需编译:仅编译当前屏幕需要的模块
- 源映射支持:完整的TypeScript调试体验
扩展特有的开发考虑
由于是浏览器扩展项目,开发时需要注意:
- 内容安全策略:扩展有严格的CSP限制
- API权限:需要在manifest中声明所需权限
- 多入口点:处理popup、options、background等多个HTML入口
- 资源加载:所有资源必须包含在扩展包中
通过以上配置,ChatHub建立了一个高效、可靠的开发环境,支持快速迭代和高质量代码输出。开发者可以专注于业务逻辑实现,而无需担心构建和工具链的复杂性。
扩展程序打包与发布流程
ChatHub扩展程序的打包与发布流程基于现代化的构建工具链,采用Vite作为构建工具,结合CRXJS插件来处理Chrome扩展程序的特殊需求。整个流程涵盖了从代码编译、资源打包到最终发布的全过程。
构建配置体系
ChatHub使用Vite作为主要的构建工具,配合TypeScript编译器进行代码转换和优化。构建配置位于vite.config.ts文件中,采用了模块化的配置方式:
import { crx } from '@crxjs/vite-plugin'
import react from '@vitejs/plugin-react'
import { defineConfig } from 'vite'
import tsconfigPaths from 'vite-tsconfig-paths'
import manifest from './manifest.config'
export default defineConfig(({ mode }) => {
return {
plugins: [
tsconfigPaths(),
react({
babel: {
plugins: [jotaiDebugLabel, jotaiReactRefresh],
},
}),
crx({ manifest }),
],
build: {
rollupOptions: {
input: ['app.html'],
},
},
esbuild: {
drop: mode === 'production' ? ['console', 'debugger'] : [],
}
}
})
构建流程通过以下mermaid流程图展示:
清单文件配置
扩展程序的核心配置文件manifest.config.ts定义了扩展的基本信息、权限要求和功能模块:
export default defineManifest(async () => {
return {
manifest_version: 3,
name: '__MSG_appName__',
description: '__MSG_appDesc__',
default_locale: 'en',
version: '1.45.7',
icons: {
'16': 'src/assets/icon.png',
'32': 'src/assets/icon.png',
'48': 'src/assets/icon.png',
'128': 'src/assets/icon.png',
},
background: {
service_worker: 'src/background/index.ts',
type: 'module',
},
permissions: ['storage', 'unlimitedStorage', 'sidePanel'],
// ... 其他配置
}
})
构建命令与流程
项目使用Yarn作为包管理器,构建命令定义在package.json中:
{
"scripts": {
"dev": "vite",
"build": "tsc && vite build"
}
}
构建过程分为两个主要阶段:
- TypeScript编译阶段:使用
tsc命令编译TypeScript代码 - Vite构建阶段:使用Vite进行资源打包和优化
生产环境优化
在生产构建时,系统会自动进行以下优化:
| 优化项 | 说明 | 效果 |
|---|---|---|
| Console清理 | 移除console和debugger语句 | 减少包体积,提高安全性 |
| 代码压缩 | 使用esbuild进行代码压缩 | 显著减小文件大小 |
| Tree Shaking | 移除未使用的代码 | 优化最终包体积 |
| 资源哈希 | 为资源文件添加哈希值 | 更好的缓存策略 |
本地开发与测试
对于本地开发和测试,可以使用以下流程:
开发服务器配置在Vite配置中指定了严格端口和HMR设置:
server: {
strictPort: true,
port: 5173,
hmr: {
clientPort: 5173,
},
}
发布准备与验证
在正式发布前,需要完成以下验证步骤:
- 清单文件验证:确保manifest配置符合Chrome扩展规范
- 权限检查:确认所有声明的权限都是必要的
- 功能测试:在所有目标浏览器中测试扩展功能
- 性能分析:检查扩展的加载时间和内存使用情况
多语言支持打包
ChatHub支持多语言国际化,构建系统会自动处理本地化资源:
本地化消息文件存储在_locales目录中,每个语言区域都有对应的JSON文件,构建时会自动将这些文件打包到最终的分发目录中。
通过这套完善的构建和发布流程,ChatHub确保了扩展程序的质量和稳定性,为用户提供了流畅的使用体验。
多语言国际化实现方案
ChatHub作为一个全球化的聊天机器人客户端,支持多达10种语言的国际化(i18n)功能,为全球用户提供本地化的使用体验。其国际化实现采用了业界成熟的i18next框架,结合React生态系统,构建了一套完整的多语言解决方案。
国际化架构设计
ChatHub的国际化架构采用分层设计,从浏览器扩展manifest到React应用界面,实现了全方位的多语言支持:
核心实现技术栈
ChatHub采用以下技术栈实现国际化功能:
| 技术组件 | 版本 | 作用描述 |
|---|---|---|
| i18next | ^22.5.1 | 核心国际化框架 |
| react-i18next | ^12.3.1 | React集成绑定 |
| i18next-browser-languagedetector | ^7.2.0 | 浏览器语言检测 |
语言资源配置体系
项目采用JSON文件存储多语言资源,每种语言对应独立的资源文件:
// 简体中文资源示例
{
"Settings": "设置",
"Startup page": "启动页面",
"Chat style": "会话风格",
"Save": "保存",
"Export/Import All Data": "导出/导入数据"
}
支持的语言包括:简体中文(zh-CN)、繁体中文(zh-TW)、英语(en)、西班牙语(es)、葡萄牙语(pt)、日语(ja)、德语(de)、法语(fr)、印尼语(in)、泰语(th)。
i18next初始化配置
在src/app/i18n/index.ts中完成了i18next的完整初始化:
import i18n, { Resource } from 'i18next'
import LanguageDetector from 'i18next-browser-languagedetector'
import { initReactI18next } from 'react-i18next'
i18n
.use(initReactI18next)
.use(LanguageDetector)
.init({
lng: getLanguage(), // 从存储获取用户设置的语言
fallbackLng: 'en', // 默认回退到英语
resources, // 多语言资源
interpolation: {
escapeValue: false, // React已处理XSS防护
},
detection: {
order: ['navigator'], // 优先使用浏览器语言
caches: [], // 不缓存检测结果
},
})
组件级国际化实现
在React组件中使用useTranslation Hook实现界面元素的动态翻译:
import { useTranslation } from 'react-i18next'
function SettingsPanel() {
const { t } = useTranslation()
return (
<div>
<h2>{t('Settings')}</h2>
<button>{t('Save')}</button>
<span>{t('Data includes all your settings')}</span>
</div>
)
}
语言切换功能实现
ChatHub提供了用户可配置的语言切换功能,通过主题设置模态框实现:
import { languageCodes } from '../../i18n'
function LanguageSelector() {
const { i18n } = useTranslation()
const handleLanguageChange = (lang: string) => {
i18n.changeLanguage(lang === 'auto' ? undefined : lang)
saveLanguage(lang) // 保存到本地存储
}
return (
<select onChange={(e) => handleLanguageChange(e.target.value)}>
<option value="auto">自动检测</option>
{languageCodes.map(code => (
<option key={code} value={code}>
{getLanguageName(code)}
</option>
))}
</select>
)
}
浏览器扩展层面的国际化
除了React应用内部,ChatHub还在浏览器扩展层面实现了多语言支持:
// _locales/zh_CN/messages.json
{
"appName": {
"message": "ChatHub - All-in-one chatbot client"
},
"appDesc": {
"message": "同时使用ChatGPT, Bing, Bard和更多机器人"
}
}
这种双重国际化机制确保了从扩展商店展示到应用内部界面的完整多语言体验。
动态参数插值
i18next支持动态参数插值,使得翻译内容更加灵活:
// 资源定义
{
"You have opened ChatHub {{openTimes}} times":
"哇!你已经打开ChatHub {{openTimes}}次了"
}
// 组件中使用
t('You have opened ChatHub {{openTimes}} times', { openTimes: 42 })
语言持久化存储
用户的语言选择通过自定义存储服务进行持久化:
// services/storage/language.ts
export async function getLanguage(): Promise<string> {
const result = await chrome.storage.local.get('language')
return result.language || 'auto'
}
export async function saveLanguage(language: string) {
await chrome.storage.local.set({ language })
}
多语言开发工作流
对于开发者,添加新的语言支持遵循标准化流程:
- 在
src/app/i18n/locales/目录创建新的语言JSON文件 - 在
src/app/i18n/index.ts中导入并注册新语言 - 更新
languageCodes数组包含新语言代码 - 在
_locales目录创建对应的扩展描述文件
性能优化策略
ChatHub的国际化实现考虑了性能因素:
- 按需加载语言资源,避免初始包体积过大
- 使用浏览器语言检测缓存策略
- 翻译键名采用简洁但有意义的命名约定
- 避免在渲染循环中进行翻译操作
这种国际化架构不仅提供了出色的用户体验,还为项目的全球化扩展奠定了坚实基础,使得ChatHub能够轻松适应不同地区和语言用户的需求。
总结
ChatHub扩展程序通过精心设计的manifest配置、现代化的开发工具链、完善的构建发布流程以及全面的多语言支持,展现了高质量的浏览器扩展开发实践。从权限管理的精细化控制到国际化架构的完整实现,为开发者提供了宝贵的参考范例,确保扩展既功能完善又具有良好的用户体验和全球化适应性。
【免费下载链接】chathub All-in-one chatbot client 项目地址: https://gitcode.com/gh_mirrors/ch/chathub
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



