Use Case
我正在使用 Cocos Creator 3.8.8 开发需要发布到多个渠道的项目,希望通过编译期宏保存以下信息:
- 构建环境,例如
"development"、"production"
- 构建版本号,例如
1001
- API 版本或数值类型的功能阈值
这些值在编译时已经确定。希望它们可以像现有布尔宏一样从 cc/userland/macro 导入,并参与编译器的常量折叠和无效分支裁剪。
相比运行时 JSON 配置,编译期宏可以提供静态类型检查,也能避免把其他渠道或环境的无效代码打入最终产物。
Problem Description
当前自定义宏的配置入口主要以布尔开关的形式工作,无法明确选择和维护 string、number 类型的值。
即使尝试直接修改 settings/v2/packages/engine.json,也缺少公开、稳定的类型约定,无法确认以下行为是否受到正式支持:
- 字符串和数字能否被正确生成到
cc/userland/macro。
- 生成的 TypeScript 声明是否保留正确类型。
- 编辑器预览与正式构建的值是否一致。
- 字符串转义、负数和小数是否能够稳定处理。
- 编辑器重新保存设置后,手动填写的值是否会被覆盖或转换。
因此,目前只能额外维护运行时配置或自行编写扩展,既重复了宏系统的功能,也无法获得统一的编译期优化行为。
Proposed Solution
希望自定义宏正式支持以下基础类型:
boolean
string
- 有限的
number
建议在项目设置的自定义宏列表中,为每一项增加类型选择器,并根据类型显示对应的输入控件。
同时希望:
- 字符串能够被安全转义和序列化。
- 数字支持整数、负数和小数,并拒绝
NaN、Infinity。
- 生成的 JavaScript 保留原始值类型。
- 生成的 TypeScript 声明至少包含对应的基础类型。
- 如果构建流程允许,TypeScript 声明可以进一步保留字面量类型。
- 编辑器预览与所有构建平台使用一致的宏值。
- 继续兼容现有布尔类型自定义宏。
- 重复名称或无效值能够显示明确的校验提示。
How it works
配置形式可以显式保存类型,也可以根据 JSON 值推断类型。以下结构仅用于说明期望行为:
{
"macroCustom": [
{
"key": "GAME_CHANNEL",
"type": "string",
"value": "wechat"
},
{
"key": "BUILD_NUMBER",
"type": "number",
"value": 1001
},
{
"key": "ENABLE_DEBUG",
"type": "boolean",
"value": false
}
]
}
### Alternatives Considered
```markdown
考虑过以下替代方案:
编写自定义编辑器扩展可以实现类似功能,但每个项目都需要自行维护扩展。该能力更适合作为 Creator 自定义宏系统的内置功能。
### Additional Information
- Cocos Creator 版本:3.8.8
- 操作系统:Windows
- 使用模块:`cc/userland/macro`
- 配置文件:`settings/v2/packages/engine.json`
当前项目中的布尔宏配置示例:
```json
{
"macroCustom": [
{
"key": "test",
"value": true
}
]
}
Use Case
我正在使用 Cocos Creator 3.8.8 开发需要发布到多个渠道的项目,希望通过编译期宏保存以下信息:
"development"、"production"1001这些值在编译时已经确定。希望它们可以像现有布尔宏一样从
cc/userland/macro导入,并参与编译器的常量折叠和无效分支裁剪。相比运行时 JSON 配置,编译期宏可以提供静态类型检查,也能避免把其他渠道或环境的无效代码打入最终产物。
Problem Description
当前自定义宏的配置入口主要以布尔开关的形式工作,无法明确选择和维护
string、number类型的值。即使尝试直接修改
settings/v2/packages/engine.json,也缺少公开、稳定的类型约定,无法确认以下行为是否受到正式支持:cc/userland/macro。因此,目前只能额外维护运行时配置或自行编写扩展,既重复了宏系统的功能,也无法获得统一的编译期优化行为。
Proposed Solution
希望自定义宏正式支持以下基础类型:
booleanstringnumber建议在项目设置的自定义宏列表中,为每一项增加类型选择器,并根据类型显示对应的输入控件。
同时希望:
NaN、Infinity。How it works
配置形式可以显式保存类型,也可以根据 JSON 值推断类型。以下结构仅用于说明期望行为:
{ "macroCustom": [ { "key": "GAME_CHANNEL", "type": "string", "value": "wechat" }, { "key": "BUILD_NUMBER", "type": "number", "value": 1001 }, { "key": "ENABLE_DEBUG", "type": "boolean", "value": false } ] } ### Alternatives Considered ```markdown 考虑过以下替代方案: 编写自定义编辑器扩展可以实现类似功能,但每个项目都需要自行维护扩展。该能力更适合作为 Creator 自定义宏系统的内置功能。 ### Additional Information - Cocos Creator 版本:3.8.8 - 操作系统:Windows - 使用模块:`cc/userland/macro` - 配置文件:`settings/v2/packages/engine.json` 当前项目中的布尔宏配置示例: ```json { "macroCustom": [ { "key": "test", "value": true } ] }