instascan
выдает ошибку в моих проектах:
TypeError: не удается прочесть свойство 'slice', равное нулю.
parseJSFunc
node_modules / instascan / src / zxing.js: 4
Проекты создаются с помощью Create React App 2. CRA2 в настоящее время находится в альфа-версии, но в остальном очень стабильна, и instascan
- первая зависимость, с которой я столкнулся, которая не работает. Возможно, проблема в instascan
.
Первоначально я сообщил о проблеме в react-instascan
(rubenspgcavalcante / react-instascan / issues / 9), но автор изучил ее и считает, что проблема находится в instascan
.
Я создал репозиторий, в котором воспроизводится ошибка:
https://github.com/lnhrdt/react-instascan-error
Любые идеи?
Привет, просто чтобы подробнее рассказать о проблеме. В примере create-response -app из
import {Camera} from "instascan";
Camera.getCameras().then(cameras => console.log(cameras));
... произойдет ошибка.
Я увидел некоторую проблему с внутренним разрешением этого скрипта в коде. Я заметил, что этот сценарий zxing (минифицированный) добавляется непосредственно в проект, а не как зависимость (должен ли этот связанный файл взят из этого проекта ?)
В любом случае, если это так, может быть, просто добавьте этот пакет, используя вместо этого npm / yarn, и проверьте, работает ли разрешение umd? 🤔
Спасибо за дополнительную информацию @rubenspgcavalcante!
Я только что обновил пример репозитория, чтобы удалить зависимость react-instascan
и продемонстрировать ошибку, используя только instascan
, как предложил Рубенс.
@lnhrdt , может, это тоже связано # 121
Ошибка другая, но я все еще думаю, что что-то с разрешением внутреннего модуля 🤔
Хорошее понимание @rubenspgcavalcante , кажется вероятным. Автор instascan еще не участвовал в этой дискуссии. @schmich есть ли у вас какое-либо представление об этой проблеме (которая может быть связана с № 121)? Здесь вам пригодятся ваши мысли!
Ошибка возникает из-за изменения синтаксиса во время транспиляции.
в zxing.js замените:
var sourceRegex = / ^ function \ s (([^)] )) \ s {\ s ([^ ] ?) [\ s;] (?: return \ s (. ?) [; \ s] )?} $ /;
от:
var sourceRegex = / ^ function \ s \ S (([^)] )) \ s {\ s ([^ ] ?) [\ s;] (?: return \ s (. ?) [; \ s] * )?} $ /;
работал у меня.
+1
Это не сработало для меня @karenjwap , но указывало мне в правильном направлении.
В идеале сборка Emscripten JavaScript для порта C ++ библиотеки ZXing Java должна быть перестроена, поскольку кажется, что текущая версия может быть несовместима с новыми браузерами.
По сути, объект с функцией в качестве значений превращается в строки, а затем анализируется на предмет их аргументов, тела и возвращаемого значения.
Регулярное выражение, отвечающее за это сопоставление с образцом, однако, не учитывает имена функций, передаются только безымянные функции.
tldr В любом случае, вот решение:
Замените бит sourceRegex
следующим регулярным выражением:
/^function[^\(]*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/
Или просто используйте вилку:
https://github.com/CrowdReactive/instascan
Самый полезный комментарий
Это не сработало для меня @karenjwap , но указывало мне в правильном направлении.
В идеале сборка Emscripten JavaScript для порта C ++ библиотеки ZXing Java должна быть перестроена, поскольку кажется, что текущая версия может быть несовместима с новыми браузерами.
По сути, объект с функцией в качестве значений превращается в строки, а затем анализируется на предмет их аргументов, тела и возвращаемого значения.
Регулярное выражение, отвечающее за это сопоставление с образцом, однако, не учитывает имена функций, передаются только безымянные функции.
tldr В любом случае, вот решение:
Замените бит
sourceRegex
следующим регулярным выражением:Или просто используйте вилку:
https://github.com/CrowdReactive/instascan