模块
模块是一组用于覆盖当前配置的设置。你可以使用模块来:
调整不可编辑配置(如托管配置和企业配置)中的设置。
一键更改部分设置。例如,你可以使用模块为所有主机名开启 MitM,并临时调整过滤器。
使用别人编写的模块来完成特定任务。例如,你的同事可能与你分享了一个将 API 请求重写为测试服务器的模块。
当你在多台设备之间共享同一个配置时,针对不同的场景可能需要修改某些设置。模块的启用状态不会同步到其他设备,因此你可以使用模块来满足这一需求。
基本概念
模块就像是对当前配置的补丁 (patch)。模块中的设置优先级高于配置中的设置。
共有 3 种类型的模块:
内部模块 (Internal Modules):由 Surge 本身提供。
本地模块 (Local Modules):放置在配置目录中的
.sgmodule文件。已安装模块 (Installed Modules):通过 URL 安装的模块。
编写模块
模块的语法与配置相同。允许你覆盖以下段落:
[General],[MITM]覆盖:
key = value追加至原始值:
key = %APPEND% value在原始值最前面插入:
key = %INSERT% value你只能在
[MITM]段落中操作hostname、skip-server-cert-verify和tcp-connection字段。用于 HTTP 抓包功能的旧版
[Replica]段落在 Surge Mac 5.4.0 中已被移除,因此模块不再需要对其进行补丁。
[WireGuard *]段落WireGuard 策略存在于名称以
WireGuard开头的段落中。模块可以像覆盖主配置一样,覆盖或追加这些段落内部的键值。[Ruleset *]段落当你定义内联规则集 (inline rulesets) 时,模块现在也可以对它们进行补丁,这对于提供内联列表的托管配置非常有用。
Rule, Script, URL Rewrite, Header Rewrite, Host
新行将插入到原始内容的顶部。
模块中的规则只能使用内部策略:
DIRECT、REJECT和REJECT-TINYGIF。Metadata (元数据)
你可以在模块文件中添加元数据:
#!name=模块名称 #!desc=模块的描述你可以将模块限制为仅在指定平台生效。(可选)
#!system=mac
示例:
参数表 Mac 5.5.0+
使用 #!arguments 元数据来声明用户在启用模块时可以自定义的参数。其语法遵循标准的查询字符串 (query-string):
每个键 (key) 会成为可用的占位符,如 %hostname%、%enable_mitm% 等,Surge 会在应用模块之前进行简单的文本替换。在 #!arguments 中定义的默认值会在 UI 中显示,并与该模块实例一起保存。
请保持占位符为字母数字组合(例如,
%SERVER_HOST%),以避免与配置语法发生冲突。删除参数时请移除未使用的占位符。
运行环境要求 (Requirements) iOS 5.10.0+ Mac 5.6.0+
模块添加了 #!requirement= 声明,以支持更复杂的使用条件限制。例如,如果模块使用了新加的 Body Rewrite 功能,它需要限制 Surge 核心版本。
#!requirement=CORE_VERSION>=20
它也支持逻辑表达式,例如:CORE_VERSION>=20 && (SYSTEM = 'iOS' || SYSTEM = 'tvOS')。
可用于判断的变量如下:
CORE_VERSION: 数字,例如
20SYSTEM: 字符串,例如
macOS、iOS、tvOSSYSTEM_VERSION: 字符串,例如
Version 17.4.1 (Build 21E236)DEVICE_MODEL: 字符串,例如
Mac15,8LANGUAGE: 字符串,例如
zh-Hans
最后更新于
这有帮助吗?