instascan
gera um erro em meus projetos:
TypeError: Não é possível ler a propriedade 'slice' de nulo
parseJSFunc
node_modules / instascan / src / zxing.js: 4
Os projetos são criados com Create React App 2. CRA2 está atualmente em alfa, mas por outro lado é muito estável e instascan
é a primeira dependência que encontrei que não funciona. Talvez o problema esteja dentro de instascan
.
Eu relatei originalmente um problema em react-instascan
(rubenspgcavalcante / react-instascan / issues / 9), mas o autor olhou para ele e acredita que o problema está dentro de instascan
.
Criei um repositório que reproduz o erro:
https://github.com/lnhrdt/react-instascan-error
Alguma ideia?
Olá, só para dar mais informações sobre o problema. No exemplo create - @lnhrdt , se você apenas sobrescrever todo o index.js com ...
import {Camera} from "instascan";
Camera.getCameras().then(cameras => console.log(cameras));
... o erro vai acontecer.
O que vi é algum problema com a resolução interna desse script no código. Observei que este script zxing (reduzido) é adicionado diretamente ao projeto e não como uma dependência (este arquivo empacotado deve vir deste projeto ?)
De qualquer forma, se for esse o caso, talvez apenas adicione esse pacote, usando npm / yarn em vez e verifique se a resolução de umd funciona? 🤔
Obrigado pela informação extra @rubenspgcavalcante!
Acabei de atualizar o repositório de exemplo para remover a dependência react-instascan
e demonstrar o erro usando apenas instascan
, da maneira que Rubens sugeriu.
@lnhrdt , talvez este também esteja relacionado # 121
O erro é diferente, mas ainda acho que é algo com a resolução do módulo interno 🤔
Boa percepção @rubenspgcavalcante , parece provável. O autor do instascan ainda não participou dessa discussão. @schmich , você tem alguma ideia sobre esse problema (que pode estar relacionado ao nº 121)? Seus pensamentos seriam úteis aqui!
O erro vem de uma mudança de sintaxe durante a transpilação.
em zxing.js, substitua:
var sourceRegex = / ^ function \ s (([^)] )) \ s {\ s ([^ ] ?) [\ s;] (?: return \ s (. ?) [; \ s] )?} $ /;
por:
var sourceRegex = / ^ function \ s \ S (([^)] )) \ s {\ s ([^ ] ?) [\ s;] (?: return \ s (. ?) [; \ s] * )?} $ /;
trabalhou para mim.
+1
Isso não funcionou para mim @karenjwap , mas me indicou a direção certa.
Idealmente, a construção Emscripten JavaScript da porta C ++ da biblioteca ZXing Java deve ser reconstruída, pois parece que a atual pode não ser compatível com os navegadores mais recentes.
Essencialmente, um objeto com função como valores é transformado em strings e, em seguida, analisado por seus argumentos, corpo e valor de retorno.
A regex que é responsável por essa correspondência de padrão, entretanto, não leva em conta os nomes das funções, apenas as funções sem nome são transmitidas.
tldr Enfim, aqui está a solução:
Substitua o bit sourceRegex
pelo seguinte regex:
/^function[^\(]*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/
Ou apenas use um garfo:
https://github.com/CrowdReactive/instascan
Comentários muito úteis
Isso não funcionou para mim @karenjwap , mas me indicou a direção certa.
Idealmente, a construção Emscripten JavaScript da porta C ++ da biblioteca ZXing Java deve ser reconstruída, pois parece que a atual pode não ser compatível com os navegadores mais recentes.
Essencialmente, um objeto com função como valores é transformado em strings e, em seguida, analisado por seus argumentos, corpo e valor de retorno.
A regex que é responsável por essa correspondência de padrão, entretanto, não leva em conta os nomes das funções, apenas as funções sem nome são transmitidas.
tldr Enfim, aqui está a solução:
Substitua o bit
sourceRegex
pelo seguinte regex:Ou apenas use um garfo:
https://github.com/CrowdReactive/instascan