From c2824a1bc8654ff66dda8b5449e3cd64ed989795 Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Mon, 9 Sep 2024 19:02:13 +0800 Subject: [PATCH 1/3] chore: Update development-setup.md --- docs/development-setup.md | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/development-setup.md b/docs/development-setup.md index cb728e93..bb441bec 100644 --- a/docs/development-setup.md +++ b/docs/development-setup.md @@ -48,9 +48,23 @@ pip install pip-tools `requirements.in` 文件是项目依赖项的源文件。要添加或更新依赖项,请直接编辑该文件。 -2. **生成 `requirements.txt` 文件**: +2. **更新特定的依赖项**: - 编辑完 `requirements.in` 文件后,运行以下命令生成或更新 `requirements.txt` 文件: + 如果你只想更新 `requirements.in` 中的某个特定依赖包,而不影响其他依赖项,可以使用 `--upgrade-package` 选项,指定要升级的包: + + ```bash + pip-compile --upgrade-package requirements.in + ``` + + 例如,要只升级 `requests` 这个包,你可以运行以下命令: + + ```bash + pip-compile --upgrade-package requests requirements.in + ``` + +3. **全量更新依赖项**: + + 如果你想更新 `requirements.in` 中的所有依赖包,运行以下命令生成或更新 `requirements.txt` 文件: ```bash pip-compile requirements.in @@ -58,7 +72,7 @@ pip install pip-tools 这将根据 `requirements.in` 中指定的依赖项生成一个锁定的 `requirements.txt` 文件。 -3. **安装依赖项**: +4. **安装依赖项**: 使用以下命令安装 `requirements.txt` 文件中列出的依赖项: From aa6fa8d336cac3cac9186b4ebe59f151966e1ad6 Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Mon, 9 Sep 2024 21:39:27 +0800 Subject: [PATCH 2/3] =?UTF-8?q?chore:=20Add=20=E6=8F=92=E4=BB=B6=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=85=BC=E5=AE=B9=E4=B8=8E=E5=8D=87=E7=BA=A7=E6=96=B9?= =?UTF-8?q?=E6=A1=88.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/插件版本兼容与升级方案.md | 128 +++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 docs/插件版本兼容与升级方案.md diff --git a/docs/插件版本兼容与升级方案.md b/docs/插件版本兼容与升级方案.md new file mode 100644 index 00000000..beb96f50 --- /dev/null +++ b/docs/插件版本兼容与升级方案.md @@ -0,0 +1,128 @@ +### **插件版本兼容与升级方案** + +#### 1. **插件目录结构** +为了确保插件管理的灵活性和兼容性,插件根据不同版本进行隔离,同时可以通过全局 `package.json` 标识兼容性。以下是目录结构示例: + +``` +- plugins/ // 全局插件目录,默认支持 v1 +- plugins.v2/ // v2 专用插件目录,管理与 v1 不兼容的插件 + - package.json // v2 专用的 package.json,管理特定 v2 插件 +- plugins.v3/ // v3 专用插件目录,管理与 v1、v2 不兼容的插件 + - package.json // v3 专用的 package.json,管理特定 v3 插件 +- package.json // 全局 package.json,管理 v1、v2、v3 插件的兼容性 +``` + +- **v1 项目**:使用 `plugins` 目录,加载全局插件,默认支持 v1 项目。 +- **v2 项目**:使用 `plugins.v2` 目录管理 v2 项目专用插件,并通过全局 `package.json` 检查多版本兼容插件。 +- **v3 项目**:使用 `plugins.v3` 目录管理 v3 项目专用插件,依次检查 `plugins.v2` 和全局 `package.json`。 + +#### 2. **全局 `package.json` 插件管理** +全局 `package.json` 文件管理插件的默认兼容性。所有插件默认支持 v1 项目,并通过 `v2: true` 和 `v3: true` 字段标识插件是否支持 v2 或 v3 项目。以下是示例: + +```json +{ + "CustomSites": { + "name": "自定义站点", + "description": "增加自定义站点为签到和统计使用。", + "labels": "站点", + "version": "1.0", + "icon": "world.png", + "author": "lightolly", + "level": 2, + "v2": true, // 适配 v2 版本 + "v3": false, // 不适配 v3,明确标记 + "history": { + "v1.2": "功能更新,提升性能", + "v1.1": "修复小问题", + "v1.0": "初始版本" + } + } +} +``` + +#### 3. **版本专属 `package.json` 文件** +为了管理 v2 和 v3 项目中的插件依赖,`plugins.v2` 和 `plugins.v3` 目录分别拥有自己的 `package.json` 文件,管理特定版本插件。这些插件可能与 v1 或其他版本不兼容,因此需要在各自版本中独立维护。 + +- **v2 的 `package.json` 文件示例**: +```json +{ + "CustomSites": { + "name": "自定义站点", + "description": "增加自定义站点为签到和统计使用。", + "labels": "站点", + "version": "1.0", + "icon": "world.png", + "author": "lightolly", + "level": 2, + "history": { + "v1.0": "初始版本" + } + } +} +``` + +- **v3 的 `package.json` 文件示例**: +```json +{ + "CustomSites": { + "name": "自定义站点", + "description": "增加自定义站点为签到和统计使用。", + "labels": "站点", + "version": "1.0", + "icon": "world.png", + "author": "lightolly", + "level": 2, + "history": { + "v1.0": "初始版本" + } + } +} +``` + +#### 4. **插件加载与版本检测** + +##### **v1 项目** +- 默认只从 `plugins` 目录加载插件,不进行任何版本筛选。 +- `package.json` 中的所有插件默认被视为兼容 v1 项目。 + +##### **v2 项目** +- **优先加载 `plugins.v2` 目录中的插件**,并依赖 `plugins.v2/package.json` 管理插件版本和依赖。 +- 如果插件在 `plugins.v2` 中不存在,则检查全局 `package.json` 中是否有标记 `v2: true` 的插件,并从全局 `plugins` 目录加载这些插件。 + +##### **v3 项目** +- **优先加载 `plugins.v3` 目录中的插件**,并依赖 `plugins.v3/package.json` 管理插件版本和依赖。 +- 如果插件在 `plugins.v3` 中不存在,则从 `plugins.v2` 目录加载插件。 +- 如果 `plugins.v2` 中也不存在,则检查全局 `package.json` 中标记 `v3: true` 的插件,并从全局 `plugins` 目录加载。 + +#### 5. **插件冲突处理** +当同一插件存在于多个目录时,插件加载按照以下优先级处理: + +- **v3 项目**: + - 优先加载 `plugins.v3` 目录中的插件。 + - 若该插件不存在于 `plugins.v3` 中,则加载 `plugins.v2` 目录中的插件。 + - 最后,若 `plugins.v2` 中也不存在,则从全局 `plugins` 目录加载并检查全局 `package.json` 中标记为 `v3: true` 的插件。 + +- **v2 项目**: + - 优先加载 `plugins.v2` 目录中的插件。 + - 若该插件不存在,则从全局 `plugins` 目录加载并检查全局 `package.json` 中标记为 `v2: true` 的插件。 + +- **v1 项目**: + - 仅加载 `plugins` 目录中的全局插件,不涉及版本兼容性检查。 + +#### 6. **插件升级与管理** +- **v1 项目**:所有插件的升级和管理在全局 `package.json` 和 `plugins` 目录中进行。 + +- **v2 和 v3 项目**: + - 插件可以通过 `package.json` 中的 `v2: true` 和 `v3: true` 字段在多版本项目中共享。 + - 插件也可以独立管理在 `plugins.v2` 或 `plugins.v3` 目录中,以确保版本专属插件不会影响其他版本项目。 + +#### 7. **向后兼容性** +- **v1 项目**:继续只从 `plugins` 目录加载全局插件,不受 `v2` 和 `v3` 插件的影响,确保向后兼容性。 + +- **v2 和 v3 项目**:通过独立的 `plugins.v2` 和 `plugins.v3` 目录管理专属插件,同时依赖全局 `package.json` 来处理跨版本兼容插件。 + +--- + +### **总结** +该方案结合了全局和版本专属的插件管理策略,确保了插件在不同项目版本中的兼容性和灵活性。全局 `package.json` 管理多版本兼容插件,而 `plugins.v2` 和 `plugins.v3` 目录则为各自项目管理特定版本插件。通过插件加载优先级和独立的 `package.json` 文件,实现了高效的插件版本控制和向后兼容性。 + From 0f5290be18e8e7ca6b99a4d03b30ce6199aaaa89 Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Tue, 10 Sep 2024 12:09:21 +0800 Subject: [PATCH 3/3] =?UTF-8?q?chore:=20Delete=20=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=85=BC=E5=AE=B9=E4=B8=8E=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E6=96=B9=E6=A1=88.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/插件版本兼容与升级方案.md | 128 --------------------------------- 1 file changed, 128 deletions(-) delete mode 100644 docs/插件版本兼容与升级方案.md diff --git a/docs/插件版本兼容与升级方案.md b/docs/插件版本兼容与升级方案.md deleted file mode 100644 index beb96f50..00000000 --- a/docs/插件版本兼容与升级方案.md +++ /dev/null @@ -1,128 +0,0 @@ -### **插件版本兼容与升级方案** - -#### 1. **插件目录结构** -为了确保插件管理的灵活性和兼容性,插件根据不同版本进行隔离,同时可以通过全局 `package.json` 标识兼容性。以下是目录结构示例: - -``` -- plugins/ // 全局插件目录,默认支持 v1 -- plugins.v2/ // v2 专用插件目录,管理与 v1 不兼容的插件 - - package.json // v2 专用的 package.json,管理特定 v2 插件 -- plugins.v3/ // v3 专用插件目录,管理与 v1、v2 不兼容的插件 - - package.json // v3 专用的 package.json,管理特定 v3 插件 -- package.json // 全局 package.json,管理 v1、v2、v3 插件的兼容性 -``` - -- **v1 项目**:使用 `plugins` 目录,加载全局插件,默认支持 v1 项目。 -- **v2 项目**:使用 `plugins.v2` 目录管理 v2 项目专用插件,并通过全局 `package.json` 检查多版本兼容插件。 -- **v3 项目**:使用 `plugins.v3` 目录管理 v3 项目专用插件,依次检查 `plugins.v2` 和全局 `package.json`。 - -#### 2. **全局 `package.json` 插件管理** -全局 `package.json` 文件管理插件的默认兼容性。所有插件默认支持 v1 项目,并通过 `v2: true` 和 `v3: true` 字段标识插件是否支持 v2 或 v3 项目。以下是示例: - -```json -{ - "CustomSites": { - "name": "自定义站点", - "description": "增加自定义站点为签到和统计使用。", - "labels": "站点", - "version": "1.0", - "icon": "world.png", - "author": "lightolly", - "level": 2, - "v2": true, // 适配 v2 版本 - "v3": false, // 不适配 v3,明确标记 - "history": { - "v1.2": "功能更新,提升性能", - "v1.1": "修复小问题", - "v1.0": "初始版本" - } - } -} -``` - -#### 3. **版本专属 `package.json` 文件** -为了管理 v2 和 v3 项目中的插件依赖,`plugins.v2` 和 `plugins.v3` 目录分别拥有自己的 `package.json` 文件,管理特定版本插件。这些插件可能与 v1 或其他版本不兼容,因此需要在各自版本中独立维护。 - -- **v2 的 `package.json` 文件示例**: -```json -{ - "CustomSites": { - "name": "自定义站点", - "description": "增加自定义站点为签到和统计使用。", - "labels": "站点", - "version": "1.0", - "icon": "world.png", - "author": "lightolly", - "level": 2, - "history": { - "v1.0": "初始版本" - } - } -} -``` - -- **v3 的 `package.json` 文件示例**: -```json -{ - "CustomSites": { - "name": "自定义站点", - "description": "增加自定义站点为签到和统计使用。", - "labels": "站点", - "version": "1.0", - "icon": "world.png", - "author": "lightolly", - "level": 2, - "history": { - "v1.0": "初始版本" - } - } -} -``` - -#### 4. **插件加载与版本检测** - -##### **v1 项目** -- 默认只从 `plugins` 目录加载插件,不进行任何版本筛选。 -- `package.json` 中的所有插件默认被视为兼容 v1 项目。 - -##### **v2 项目** -- **优先加载 `plugins.v2` 目录中的插件**,并依赖 `plugins.v2/package.json` 管理插件版本和依赖。 -- 如果插件在 `plugins.v2` 中不存在,则检查全局 `package.json` 中是否有标记 `v2: true` 的插件,并从全局 `plugins` 目录加载这些插件。 - -##### **v3 项目** -- **优先加载 `plugins.v3` 目录中的插件**,并依赖 `plugins.v3/package.json` 管理插件版本和依赖。 -- 如果插件在 `plugins.v3` 中不存在,则从 `plugins.v2` 目录加载插件。 -- 如果 `plugins.v2` 中也不存在,则检查全局 `package.json` 中标记 `v3: true` 的插件,并从全局 `plugins` 目录加载。 - -#### 5. **插件冲突处理** -当同一插件存在于多个目录时,插件加载按照以下优先级处理: - -- **v3 项目**: - - 优先加载 `plugins.v3` 目录中的插件。 - - 若该插件不存在于 `plugins.v3` 中,则加载 `plugins.v2` 目录中的插件。 - - 最后,若 `plugins.v2` 中也不存在,则从全局 `plugins` 目录加载并检查全局 `package.json` 中标记为 `v3: true` 的插件。 - -- **v2 项目**: - - 优先加载 `plugins.v2` 目录中的插件。 - - 若该插件不存在,则从全局 `plugins` 目录加载并检查全局 `package.json` 中标记为 `v2: true` 的插件。 - -- **v1 项目**: - - 仅加载 `plugins` 目录中的全局插件,不涉及版本兼容性检查。 - -#### 6. **插件升级与管理** -- **v1 项目**:所有插件的升级和管理在全局 `package.json` 和 `plugins` 目录中进行。 - -- **v2 和 v3 项目**: - - 插件可以通过 `package.json` 中的 `v2: true` 和 `v3: true` 字段在多版本项目中共享。 - - 插件也可以独立管理在 `plugins.v2` 或 `plugins.v3` 目录中,以确保版本专属插件不会影响其他版本项目。 - -#### 7. **向后兼容性** -- **v1 项目**:继续只从 `plugins` 目录加载全局插件,不受 `v2` 和 `v3` 插件的影响,确保向后兼容性。 - -- **v2 和 v3 项目**:通过独立的 `plugins.v2` 和 `plugins.v3` 目录管理专属插件,同时依赖全局 `package.json` 来处理跨版本兼容插件。 - ---- - -### **总结** -该方案结合了全局和版本专属的插件管理策略,确保了插件在不同项目版本中的兼容性和灵活性。全局 `package.json` 管理多版本兼容插件,而 `plugins.v2` 和 `plugins.v3` 目录则为各自项目管理特定版本插件。通过插件加载优先级和独立的 `package.json` 文件,实现了高效的插件版本控制和向后兼容性。 -