Skip to content

Corrigir build:web do CI: permissões de câmera declaradas no app.json - #3

Merged
lucasjosee merged 1 commit into
review/sprint6-cross-validationfrom
fix/ci-vision-camera-plugin
Sep 9, 2026
Merged

lucasjosee merged 1 commit into
review/sprint6-cross-validationfrom
fix/ci-vision-camera-plugin

Conversation

@lucasjosee

Copy link
Copy Markdown
Owner

Destrava o job Frontend do CI, que falhava no passo npm run build:web desde antes deste ciclo de correções.

Causa raiz

ERR_MODULE_NOT_FOUND: Cannot find module '.../react-native-vision-camera/lib/VisionCamera'
  imported from '.../react-native-vision-camera/lib/CameraDevices.js'

O pacote publicado não contém app.plugin.js — o campo files do package.json não o inclui, e conferi baixando os tarballs de 5.0.11, 5.1.0 e 5.2.3: nenhuma versão 5.x publica esse arquivo. Upgrade não resolveria.

Sem o plugin, o Expo cai para o main entry (lib/index.js), que é a biblioteca de runtime e não um config plugin. Ela usa import { VisionCamera } from './VisionCamera' — sem extensão, válido em CommonJS e inválido no resolvedor ESM do Node.

Por que passava localmente

Havia um app.plugin.js escrito à mão dentro de node_modules, que é gitignored. Existia só numa máquina, o CI nunca o viu, e sumiria no primeiro npm ci. Era exatamente o que mascarava o problema — e a razão de o build "passar localmente" enquanto quebrava no CI.

Removido, para que local e CI parem de divergir.

A correção

O plugin fazia só duas coisas:

Antes (config plugin) Agora (declarativo)
Android withAndroidManifestandroid.permission.CAMERA android.permissions
iOS withInfoPlistNSCameraUsageDescription ios.infoPlist

Ambas são nativas do app.json, então vendorizar 69 linhas de JS para reproduzir o plugin seria pior. O vínculo nativo da vision-camera vem do autolinking (react-native.config.js), não do config plugin, então remover a entrada não afeta o build nativo — só as permissões, que continuam idênticas.

Verificação

Escondi o app.plugin.js escrito à mão para reproduzir a condição do CI:

  • build:webpassa
  • typecheck — limpo
  • testes — 54/54

Também confirmei que expo-router, react-native-fast-tflite e llama.rn publicam app.plugin.js corretamente: a falha não vai apenas andar para o próximo plugin.

Nota

Este PR não dispara CI, porque o workflow tem gatilho pull_request: branches: [main, develop] e a base aqui é a branch de review. O sinal verde aparece no PR #1 depois do merge.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Pmgii3S5sfMZghFqQXhbkH

…lugin

O build:web quebrava no CI com ERR_MODULE_NOT_FOUND ao carregar
react-native-vision-camera como config plugin do Expo.

Causa raiz: o pacote publicado NÃO contém app.plugin.js — o campo `files` do
package.json não o inclui, e nenhuma versão 5.x publica esse arquivo. Sem ele,
o Expo cai para o main entry (lib/index.js), que é a biblioteca de runtime e
usa import sem extensão (`./VisionCamera`), inválido no resolvedor ESM.

Passava localmente porque havia um app.plugin.js escrito à mão dentro de
node_modules, que é gitignored: existia só nesta máquina, o CI nunca o viu, e
sumiria em qualquer npm ci. Era exatamente o que mascarava o problema.

O plugin fazia só duas coisas — permissão de câmera no Android e
NSCameraUsageDescription no iOS. Ambas são declarativas no app.json, então
vendorizar 69 linhas de JS para reproduzi-lo seria pior. O vínculo nativo da
vision-camera vem do autolinking (react-native.config.js), não do config
plugin, então remover a entrada não afeta o build nativo.

Verificado escondendo o arquivo escrito à mão para simular a condição do CI:
build:web passa. Os outros três plugins (expo-router, react-native-fast-tflite,
llama.rn) publicam app.plugin.js corretamente e não têm esse problema.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pmgii3S5sfMZghFqQXhbkH
@lucasjosee
lucasjosee merged commit 11085b4 into review/sprint6-cross-validation Sep 9, 2026
@lucasjosee
lucasjosee deleted the fix/ci-vision-camera-plugin branch September 10, 2026 12:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant