Skip to content
My custom sidebar

编译器标志

Perry 命令行界面(CLI)所有标志的完整参考。

全局标志

适用于所有命令:

标志描述
--format text|json输出格式(默认值:text
-v, --verbose提高日志详细程度(可重复使用:-v-vv-vvv
-q, --quiet抑制非错误输出
--no-color禁用 ANSI 颜色代码

编译目标

使用 --target 进行交叉编译:

目标平台说明
(无)当前平台默认行为
ios-simulatoriOS 模拟器ARM64 模拟器二进制文件
iosiOS 设备ARM64 设备二进制文件
android安卓ARM64/ARMv7 架构
ios-widgetiOS 小组件WidgetKit 扩展(需指定 --app-bundle-id
ios-widget-simulatoriOS 小组件(模拟器)适用于模拟器的小组件
watchos-widgetwatchOS 复杂功能小组件适用于 Apple Watch 的 WidgetKit 扩展
watchos-widget-simulatorwatchOS 小组件(模拟器)适用于 watchOS 模拟器的小组件
android-widget安卓小组件安卓应用小组件(基于 AppWidgetProvider)
wearos-tileWear OS 磁贴Wear OS 磁贴(基于 TileService)
wasmWebAssembly包含 WASM 的独立 HTML 文件或原始 .wasm 二进制文件
web网页端输出包含 JS 的 HTML 文件
windows视窗系统Win32 可执行文件
linux类 Linux 系统GTK4 可执行文件

输出类型

使用 --output-type 更改生成产物类型:

类型描述
executable独立二进制文件(默认值)
dylib共享库(.dylib/.so 格式),用于插件

调试标志

标志描述
--print-hir将高级中间表示(HIR)打印至标准输出(stdout)
--no-link仅生成 .o 目标文件,跳过链接步骤
--keep-intermediates保留 .o.asm 中间文件

输出优化

标志描述
--minify压缩并混淆输出内容(指定 --target web 时自动启用)

代码压缩会移除注释、合并空白字符,并混淆局部变量/参数/非导出函数名称,以减小输出文件体积。

测试标志

标志描述
--enable-geisterhand嵌入 Geisterhand HTTP 服务器,用于程序化 UI 测试(默认端口 7676)
--geisterhand-port <PORT>为 Geisterhand 服务器设置自定义端口(隐含启用 --enable-geisterhand

运行时标志

标志描述
--enable-js-runtime启用 V8 JavaScript 运行时,以兼容未适配的 npm 包
--type-check通过 tsgo 进程间通信(IPC)启用类型检查

环境变量

变量描述
PERRY_LICENSE_KEY用于 perry publish 命令的 Perry Hub 许可证密钥
PERRY_APPLE_CERTIFICATE_PASSWORD.p12 证书的密码
PERRY_NO_UPDATE_CHECK=1禁用自动更新检查
PERRY_UPDATE_SERVER自定义更新服务器地址
CI=true自动跳过更新检查(多数 CI 系统会自动设置)
RUST_LOG调试日志级别(debuginfotrace

配置文件

perry.toml(项目级)

toml
[project]
name = "my-app"
entry = "src/main.ts"
version = "1.0.0"

[build]
out_dir = "build"

[app]
name = "My App"
description = "A Perry application"

[macos]
bundle_id = "com.example.myapp"
category = "public.app-category.developer-tools"
minimum_os = "13.0"
distribute = "notarize"  # "appstore", "notarize", or "both"

[ios]
bundle_id = "com.example.myapp"
deployment_target = "16.0"
device_family = ["iphone", "ipad"]

[android]
package_name = "com.example.myapp"
min_sdk = 26
target_sdk = 34

[linux]
format = "appimage"  # "appimage", "deb", "rpm"
category = "Development"

~/.perry/config.toml(全局级)

toml
[apple]
team_id = "XXXXXXXXXX"
signing_identity = "Developer ID Application: Your Name"

[android]
keystore_path = "/path/to/keystore.jks"
key_alias = "my-key"

示例

bash
# Simple CLI program
perry main.ts -o app

# iOS app for simulator
perry app.ts -o app --target ios-simulator

# Web app (WASM with DOM bridge — alias: --target wasm)
perry app.ts -o app --target web

# Plugin shared library
perry plugin.ts --output-type dylib -o plugin.dylib

# iOS widget with bundle ID
perry widget.ts --target ios-widget --app-bundle-id com.example.app

# Debug compilation
perry app.ts --print-hir 2>&1 | less

# Verbose compilation
perry compile app.ts -o app -vvv

# Type-checked compilation
perry app.ts -o app --type-check

# Raw WASM binary (no HTML wrapper)
perry app.ts -o app.wasm --target wasm

# Minified web output (compresses embedded JS bridge)
perry app.ts -o app --target web --minify

后续参考

MIT License.