Skip to content

Taro 4.2.0 在 macOS 上执行 doctor / build 时 native panic:system-configuration dynamic_store Attempted to create a NULL object #19243

Description

@ezsky

请先确认

  • 我已搜索并确定这个提交不是重复的

Taro 版本

v4

相关领域

None

使用框架

React

相关平台

  • 所有平台
  • Web 端(H5)
  • 移动端(React-Native)
  • 鸿蒙(Harmony)
  • 鸿蒙容器(Harmony Hybrid)
  • ASCF 元服务
  • 快应用(QuickApp)
  • 所有小程序
  • 微信小程序
  • 企业微信小程序
  • 京东小程序
  • 百度小程序
  • 支付宝小程序
  • 支付宝 IOT 小程序
  • 头条小程序
  • QQ 小程序
  • 钉钉小程序
  • 飞书小程序
  • 快手小程序

小程序基础库版本

No response

问题描述

## 标题

Taro 4.2.0 在 macOS 上执行 `doctor` / `build` 时 native panic:`system-configuration` dynamic_store `Attempted to create a NULL object`

## 环境

- OS:macOS 15.7.3
- Shell:zsh 5.9
- Node:v22.20.0
- pnpm:10.28.0
- Taro CLI:4.2.0
- `@tarojs/plugin-doctor`:0.0.13
- 框架:React
- 编译器:webpack5
- 构建目标:weapp

`taro info` 输出显示所有 Taro 相关包均为 4.2.0。

## 复现步骤

在一个 Taro 4.2.0 weapp 项目中执行任意一个命令:

```bash
pnpm --filter miniprogram exec taro doctor

或:

pnpm --filter miniprogram run build
# package script: taro build --type weapp

实际表现

doctortaro build --type weapp 都会在真正的项目检查或构建继续执行前触发 native Rust panic。

doctor 输出:

👽 Taro v4.2.0

-------- Config Environment --------
NODE_ENV: undefined
APP_ENV: undefined
Is Watch Mode: false
Selected Config: DEV
------------------------------------
🎯 验证环境信息!
[✓]  安装的 Node 版本为 v22.20.0

thread 'tokio-runtime-worker' panicked at /Users/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/system-configuration-0.5.1/src/dynamic_store.rs:154:1:
Attempted to create a NULL object.
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

build 输出:

> taro build --type weapp

👽 Taro v4.2.0

-------- Config Environment --------
NODE_ENV: production
APP_ENV: undefined
Is Watch Mode: false
Selected Config: PROD
------------------------------------

thread 'tokio-runtime-worker' panicked at /Users/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/system-configuration-0.5.1/src/dynamic_store.rs:154:1:
Attempted to create a NULL object.

进程不会干净地失败,可能会一直卡住,需要手动 kill。

预期表现

  • taro doctor 应该完成诊断,或返回一个可恢复的普通错误。
  • taro build --type weapp 不应该在 doctor/config validation 阶段 panic。
  • 如果 macOS SystemConfiguration 无法读取,native 层应该返回普通 JS 错误,而不是直接 panic。

临时绕过方案

下面的命令可以正常工作:

taro build --type weapp --no-check

加上 --no-check 后,webpack 能正常完成构建,并生成 dist。这说明应用代码和 webpack 编译链路本身没有问题,问题集中在 doctor/config validation 的 native 路径。

额外观察

pnpm --filter miniprogram exec taro info 可以正常执行。

pnpm --filter miniprogram exec taro inspect --type weapp 可以正常执行。

设置 useRemoteConfigSchemafalse 不能避免该 panic。

另外,taro config set useRemoteConfigSchema false 会把 false 以字符串 "false" 写入 ~/.taro4.0/index.json,随后会导致:

Error: Failed to convert napi value into rust type `bool`
code: 'BooleanExpected'

手动把它改成 JSON boolean false 后,可以解决 bool 类型转换错误,但原始的 system-configuration panic 仍然存在。

可能原因

推测:@tarojs/plugin-doctor 的 native validation 过程中可能通过 Rust system-configuration crate 调用了 macOS SystemConfiguration。在当前环境下,dynamic store 创建返回了 null,而 Rust 层直接 panic,没有把该异常转换成可处理的错误返回给 JS。


### 复现链接

无

### 复现步骤

## 复现步骤

在一个 Taro 4.2.0 weapp 项目中执行任意一个命令:

```bash
pnpm --filter miniprogram exec taro doctor

或:

pnpm --filter miniprogram run build
# package script: taro build --type weapp

环境信息

## 环境

- OS:macOS 15.7.3
- Shell:zsh 5.9
- Node:v22.20.0
- pnpm:10.28.0
- Taro CLI:4.2.0
- `@tarojs/plugin-doctor`:0.0.13
- 框架:React
- 编译器:webpack5
- 构建目标:weapp

`taro info` 输出显示所有 Taro 相关包均为 4.2.0。

开源贡献

Metadata

Metadata

Assignees

No one assigned

    Labels

    F-reactFramework - ReactT-weappTarget - 编译到微信小程序V-4Version - 4.xbugSomething isn't working

    Type

    No type

    Projects

    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions