Skip to content

目录结构

概览

WebExtend 提供了一个标准化的项目结构,可帮助你有效地组织浏览器扩展代码。本指南介绍了 WebExtend 项目中的关键目录和文件。

一个典型的 WebExtend 项目目录结构如下。

my-web-extension/
├── public/                # Static assets
│   └── _locales/          # Localization files
├── src/                   # Source code
│   ├── assets/            # Processed assets
│   │   ├── icon-16.png
│   │   ├── icon-32.png
│   │   └── icon-128.png
│   ├── background/        # Background script
│   │   └── index.js
│   ├── content/           # Content script
│   │   └── index.js
│   ├── devtools.js        # DevTools page
│   ├── pages/
│   │   ├── welcome/
│   │   │   ├── index.js
│   │   │   └── style.css
│   │   └── panel/         # Panel implementation
│   │       ├── index.js
│   │       └── style.css
│   ├── popup/             # Popup UI
│   │   ├── index.js
│   │   └── style.css
│   ├── options/           # Options page
│   │   └── index.js
│   ├── scripting/         # Scripting injection
│   │   └── index.js
│   └── sidepanel/         # Side panel
│       └── index.js
├── .env                   # Environment variables
├── .env.development       # Development env vars
├── .env.production        # Production env vars
├── .gitignore             # Git ignore rules
├── package.json           # Project metadata
├── web-extend.config.js   # Web-extend configuration
├── web-ext.config.js      # Web-ext configuration
├── rsbuild.config.ts      # Rsbuild configuration
└── tsconfig.json          # TypeScript configuration

顶层目录

项目的顶层目录用于组织公共静态资源、源码、项目配置等目录或文件。

名称描述
public/公共的静态资源,这些资源会被直接拷贝到构建产物目录下
src/源码目录
.web-extend/WebExtend 临时目录,存放构建信息
.env公共环境变量文件
.env.local本地的公共环境变量文件,需要添加到 .gitignore 中
.env.development环境变量文件,在 process.env.NODE_ENV 为 'development' 时有效
.env.production环境变量文件,在 process.env.NODE_ENV 为 'production' 时有效
.env.development.local本地环境变量文件,在 process.env.NODE_ENV 为 'development' 时有效,需要添加到 .gitignore 中
.env.production.local本地环境变量文件,在 process.env.NODE_ENV 为 'production' 时有效,需要添加到 .gitignore 中
.gitignoreGit 的忽略文件
package.json项目的依赖和脚本
rsbuild.config.tsRsbuild 配置文件
web-extend.config.jsWebExtend 配置文件
web-ext.config.jsweb-ext 配置文件
tsconfig.jsonTypeScript 配置文件

源码目录

项目的源码目录用于组织入口、组件、库等目录或文件。

名称描述
assets/静态资源目录,存放 icons 等文件,这些资源会被构建工具处理
backgroundbackground 入口
bookmarksbookmarks 入口
contentcontents单个或多个 content 入口
devtoolsdevtools 入口
historyhistory 入口
newtabnewtab 入口
optionsoptions 入口
pages/HTML 页面
popuppopup 入口
sidepanelsidepanel 入口
sandboxsandboxes单个或多个 sandbox 入口
scripting/Scripting 注入
sidepanel/Side panel 入口

Manifest 生成

WebExtend 中无需手动维护 manifest.json 文件,它会基于文件系统自动生成 manifest.json 中的配置项,对应的映射关系如下。

Manifest 字段映射路径
manifest_version默认为 3
namepackage.jsondisplayNamename 字段
versionpackage.jsonversion 字段
descriptionpackage.jsondescription 字段
authorpackage.jsonauthor 字段
homepage_urlpackage.jsonhomepage 字段
iconsaction.default_iconsrc/assets/icon-[size].png
action.default_popupsrc/popup.jssrc/popup/index.js
background.service_workersrc/background.jssrc/background/index.js
content_scriptssrc/content.jssrc/contents/*.js
options_ui.pagesrc/options.jssrc/options/index.js
devtools_pagesrc/devtools.jssrc/devtools/index.js
sandbox.pagessrc/sandbox.jssrc/sandboxes/*.js
chrome_url_overrides.newtabsrc/newtab.jssrc/newtab/index.js
chrome_url_overrides.bookmarkssrc/bookmarks.jssrc/bookmarks/index.js
chrome_url_overrides.historysrc/history.jssrc/history/index.js
side_panel.default_pathsrc/sidepanel.jssrc/sidepanel/index.js
_localespublic/_locales/*
web_accessible_resourcespublic/*

配置文件

.env

WebExtend 使用灵活的环境配置系统:

.env                   # Base variables, always loaded
.env.local             # Local overrides (git-ignored)
.env.development       # Development-specific variables
.env.production        # Production-specific variables
.env.[mode].local      # Local mode-specific overrides (git-ignored)

优先级从高到低依次如下:

  1. .env.[mode].local
  2. .env.[mode]
  3. .env.local
  4. .env

配置示例

env
# .env
API_ENDPOINT=https://api.example.com
DEBUG=false

# .env.development
API_ENDPOINT=https://dev-api.example.com
DEBUG=true

参考 environment variables

web-extend.config.js

WebExtend 允许你通过 web-extend.config.(ts|js|mjs) 文件来自定义项目的各个方面。

示例如下:

web-extend.config.js
ts
import { defineConfig } from "web-extend";

export default defineConfig({
  srcDir: "src", // Source directory (default: "src")
  outDir: ".output", // Output directory (default: "dist")
  manifest: {}, // Custom manifest overrides (default: {})
  target: "firefox-mv2", // Browser target (default: "chrome-mv3")
  webExt: {}, // Customize web-ext configurations
  rsbuild: {}, // Customize Rsbuild configurations
});

web-ext.config.js

WebExtend 使用 web-ext 作为浏览器运行器。你可以通过以下两种方式来自定义运行器配置:

  • web-extend.config.js 文件中的 webExt 选项
  • 独立的 web-ext.config.(ts|js|mjs) 文件

当两种配置方法都提供时,web-extend.config.js 中的 webExt 选项将优先,web-ext.config.js 将被忽略。

示例如下:

web-ext.config.js
javascript
import { defineWebExtConfig } from "web-extend";

export default defineWebExtConfig({
  startUrl: ["https://example.com"],
});

rsbuild.config.js

WebExtend 使用 Rsbuild 作为打包器。你可以通过以下两种方式来自定义 Rsbuild 配置:

  • web-extend.config.js 文件中的 rsbuild 选项
  • 独立的 rsbuild.config.(ts|js|mjs) 文件

当两种配置方法都提供时,web-extend.config.js 中的 rsbuild 选项将优先,rsbuild.config.js 将被忽略。

示例如下:

rsbuild.config.js
js
import { defineConfig } from "@rsbuild/core";
import { pluginReact } from "@rsbuild/plugin-react";

export default defineConfig({
  plugins: [pluginReact()],
});

基于 MIT 许可发布