Falha do Node + tsx com “__name is not a function”
Resumo
Executar o OpenClaw via Node comtsx falha na inicialização com:
tsx (commit 2871657e, 2026-01-06). O mesmo caminho de execução funcionava com Bun.
Ambiente
- Node: v25.x (observado em v25.3.0)
- tsx: 4.21.0
- SO: macOS (a reprodução também é provável em outras plataformas que executam Node 25)
Reprodução (somente Node)
Reprodução mínima no repositório
Verificação da versão do Node
- Node 25.3.0: falha
- Node 22.22.0 (Homebrew
node@22): falha - Node 24: ainda não instalado aqui; precisa de verificação
Notas / hipótese
tsxusa esbuild para transformar TS/ESM. OkeepNamesdo esbuild emite um helper__namee envolve definições de função com__name(...).- A falha indica que
__nameexiste, mas não é uma função em tempo de execução, o que implica que o helper está ausente ou foi sobrescrito para esse módulo no caminho do carregador do Node 25. - Problemas semelhantes com o helper
__namejá foram relatados em outros consumidores do esbuild quando o helper está ausente ou é reescrito.
Histórico da regressão
2871657e(2026-01-06): os scripts foram alterados de Bun para tsx para tornar o Bun opcional.- Antes disso (caminho com Bun),
openclaw statusegateway:watchfuncionavam.
Soluções alternativas
- Usar Bun para scripts de desenvolvimento (reversão temporária atual).
-
Usar
tsgopara a verificação de tipos do repositório e, em seguida, executar a saída compilada: -
Nota histórica:
tscfoi usado aqui durante a depuração desse problema de Node/tsx, mas as faixas de verificação de tipos do repositório agora usamtsgo. -
Desabilitar
keepNamesdo esbuild no carregador TS, se possível (isso evita a inserção do helper__name); o tsx atualmente não expõe isso. -
Testar Node LTS (22/24) com
tsxpara ver se o problema é específico do Node 25.
Referências
- https://opennext.js.org/cloudflare/howtos/keep_names
- https://esbuild.github.io/api/#keep-names
- https://github.com/evanw/esbuild/issues/1031
Próximos passos
- Reproduzir no Node 22/24 para confirmar uma regressão do Node 25.
- Testar o
tsxnightly ou fixar em uma versão anterior, se houver uma regressão conhecida. - Se também reproduzir no Node LTS, abrir um relatório upstream com uma reprodução mínima e o stack trace de
__name.