鸿蒙专家 发表于 前天 13:00

鸿蒙元服务ASCF配置:打包忽略、启动参数与编译优化

在鸿蒙元服务开发中,除了常见的 app.json 和页面级 .json 配置,还有两个项目级别的配置文件——ascf.config.json 和 ascf.private.config.json。它们位于项目根目录,控制编译行为、打包策略与调试启动参数。合理配置这两个文件,能明显提升日常开发和构建效率。

两个配置文件的分工

ascf.config.json 是公共配置文件,通常提交到代码仓库,团队成员共享。ascf.private.config.json 是个人配置文件,一般不会提交,只影响本地开发环境。两者的参数优先级为:命令行参数 > 个人配置文件 > 公共配置文件 > 系统默认。使用这些配置需要 ASCF Toolkit 版本不低于 1.0.4,部分高级配置项有更高的版本要求。

packOptions:精确控制打包内容

packOptions 是最常用的配置项,用于忽略不需要打包的文件。支持按文件、文件夹、后缀、前缀、glob 模式和正则表达式进行排除,例如:


{
"packOptions": {
    "ignore": [
      { "type": "file", "value": "test/test.js" },
      { "type": "folder", "value": "test" },
      { "type": "suffix", "value": ".png" },
      { "type": "prefix", "value": "sub-" },
      { "type": "glob", "value": "test/*.js" },
      { "type": "regexp", "value": "^sub.*\\.js$" }
    ]
}
}


需要特别留意:app.json 中配置的页面路径以及实际使用到的组件,不会被 packOptions.ignore 排除。即使写入了匹配规则,这些文件依然会参与打包。如果想用 ignore 剔除测试页面,这条路是走不通的。

launchOptions:调试直达指定页面

launchOptions 仅在 ascf.private.config.json 中生效,用于设置调试时默认启动的页面和参数。例如:


{
"launchOptions": {
    "path": "page/API/pages/battery/battery",
    "query": {
      "source": "debug"
    }
}
}


配置后,每次调试都会直接打开电池信息页面,无需手动导航。query 参数可在 App.onLaunch 的 options 中获取:


App({
onLaunch(options) {
    console.info('启动参数:', JSON.stringify(options));
}
});


这个功能在调试特定业务页面时非常实用,但要注意它属于 private 配置,其他开发同学拉取代码后不会生效,需要各自在本地创建该文件。

编译性能优化配置

随着项目体积增大,编译耗时越来越明显。以下是原文提到的几项关键优化配置。

使用 swc 替代 babel:默认编译使用 babel,开启 swc 后编译速度明显提升,项目越大效果越明显。


{
"swc": true
}


关闭分包(debug 模式):仅在调试编译时生效,生产构建不受影响。开发时把分包合并到主包,可以加快构建。


{
"disableSubpackages": true
}


跳过 API 校验:正常编译时会校验 API 和组件的兼容性,跳过可以省下几秒。


{
"skipApiValidator": true
}


缓存开关:默认开启缓存,第一次编译后二次编译会快很多。如果遇到缓存导致的异常,可以关闭。


{
"cache": false
}


templateHoist 减少包体积:当项目使用类 Taro 框架的 base.hxml 模板时,开启该选项可减少重复代码,从而减小包体积,建议开启。


{
"templateHoist": true
}


与编译行为相关的还有日志级别和 source map 配置。日志级别默认为 info,可选 debug < info < warn < error,调试时可设为 debug 获取更多信息。source map 默认是 eval-cheap-source-map,若需要更完整的映射可换成 source-map,但速度会更慢;追求速度可用 eval。

调试相关配置

ascfDebugger 用于开启首行断点,方便从代码第一行开始调试,适用于启动流程排查。


{
"ascfDebugger": "brk"
}


enableDevtools 则用于开启 ASCF Console 调试工具,建议仅在 debug 环境中打开。


{
"enableDevtools": true
}


这两个功能容易被混淆:ascfDebugger 是断点控制,enableDevtools 是调试控制台工具,作用不同。

实验性功能:templateHoist 开启后,base.hxml 构建缓存默认开启,对应配置如下。若遇到异常,可将其关闭。


{
"experimental": {
    "cacheBaseHxml": true
}
}


实际项目配置参考

大多数项目使用以下配置即可满足需求。公共配置 ascf.config.json 示例:


{
"packOptions": {
    "ignore": [
      { "type": "folder", "value": "__tests__" },
      { "type": "suffix", "value": ".md" },
      { "type": "glob", "value": "docs/**" }
    ]
},
"swc": true,
"templateHoist": true,
"logging": "info"
}


个人配置 ascf.private.config.json 示例(不提交):


{
"disableSubpackages": true,
"skipApiValidator": true,
"launchOptions": {
    "path": "page/API/pages/appjson/appjson"
},
"enableDevtools": true
}


常见问题与踩坑记录

packOptions.ignore 对页面路径不生效,这是文档中容易忽略的细节。即使 ignore 中写了匹配规则,app.json 已声明的页面和组件仍会打包。

private 配置只影响本地,ascf.private.config.json 需要开发者自己创建。如果发现 launchOptions 等配置不生效,先检查该文件是否存在且是否被提交。

参数优先级容易混淆,命令行参数最高,其次是 private 配置,然后是 public 配置。例如在 ascf.config.json 中设置 swc: true,但命令行传了 --swc=false,最终会使用 babel。

注意 Toolkit 版本要求,compileMode 需要 >= 1.0.16,enableDevtools 需要 >= 1.0.17 等。版本不足时,配置不会生效。

总的来说,项目级 json 配置虽然平时接触不多,但用好之后对开发效率的提升很明显。swc 编译、缓存、跳过校验这些优化,在项目变大后收益尤其突出。launchOptions 也是一个容易被忽略的好功能,配合 private 配置能省去每次手动跳转页面的操作。

热心网友2 发表于 前天 19:00

Re: 鸿蒙元服务ASCF配置:打包忽略、启动参数与编译优化

感谢楼主整理,这些配置项讲得很清楚。之前一直没搞明白 `ascf.config.json` 和 `ascf.private.config.json` 的优先级,原来是这样。那个 `launchOptions` 调试直达页面的功能挺实用的,省得每次手动点半天。另外 swc 替换 babel 那个优化,回头在项目里试试,最近编译确实越来越慢了。

热心网友7 发表于 前天 19:10

Re: 鸿蒙元服务ASCF配置:打包忽略、启动参数与编译优化

楼主写得很详细,正好最近在调鸿蒙元服务,这些配置点很实用。尤其那个 packOptions 忽略不了页面路径和组件的提醒,之前还真没注意,差点踩坑。launchOptions 放 private 文件里这个设计也挺合理,避免影响团队其他人。想问问楼主,debug 模式关分包那个配置,一般项目里能省多少编译时间?我们分包比较多,有点心动想试试。

热心网友3 发表于 前天 19:15

Re: 鸿蒙元服务ASCF配置:打包忽略、启动参数与编译优化

感谢分享,写得很清楚!之前一直搞不清 ascf.config.json 和 ascf.private.config.json 的优先级,这下明白了。想再确认一下:packOptions.ignore 里用 glob 和 regexp 时,匹配的基准路径是项目根目录对吧?另外 launchOptions 只能配在 private 文件里,那如果我想让团队成员调试时都默认打开某个页面,是不是只能在公共配置里也放一份?还是说只能各自本地配?
页: [1]
查看完整版本: 鸿蒙元服务ASCF配置:打包忽略、启动参数与编译优化