Для исходного отображения здесь является то, как я это сделать:
В моем расслоении команды для моего производства сборки я говорю это, чтобы создать источник карты:
IOS:
react-native bundle --platform ios --entry-file index.ios.js --dev false --bundle-output ./ios/main.jsbundle --assets-dest ./ios --sourcemap-output ./sourcemap.js
Android - мне пришлось на самом деле изменить файл android/app/react.gradle, чтобы получить исходные карты, генерируемые при компиляции выпуска. Там может быть более простым способом, но в основном найти, где он строит команду пучка в методе bundleReleaseJsAndAssets и добавить немного источника карты к нему:
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
commandLine "cmd","/c", "react-native", "bundle", "--platform", "android", "--dev", "false", "--entry-file",
entryFile, "--bundle-output", jsBundleFileRelease, "--assets-dest", resourcesDirRelease, "--sourcemap-output", file("$buildDir/../../../sourcemap.js")
} else {
commandLine "react-native", "bundle", "--platform", "android", "--dev", "false", "--entry-file",
entryFile, "--bundle-output", jsBundleFileRelease, "--assets-dest", resourcesDirRelease, "--sourcemap-output", file("$buildDir/../../../sourcemap.js")
}
Выходной путь выглядит немного странно, но это ставит его в вашем (то же самое место, что и у iOS. Я так хотел, вы можете поместить его в любом месте).
После того, как вы получили сообщение об ошибке с номером строки, это ничего не значит, что вы запускаете ее через NPM-пакет «source-map». Вы могли бы получить очень подробно с вашим подходом, но я просто пошел с:
var sourceMap = require('source-map');
var fs = require('fs');
fs.readFile('./sourcemap.js', 'utf8', function (err, data) {
var smc = new sourceMap.SourceMapConsumer(data);
console.log(smc.originalPositionFor({
line: 16,
column: 29356
}));
});
Где строка и столбец должен быть заменен Withe номер строки и столбца из вашего примера выхода выше.
Это, очевидно, работает лучше всего, если у вас есть исходные карты, хранящиеся где-то, когда номера строк и столбцов меняются от сборки до сборки при изменении вашего кода. Он должен быть довольно близок, хотя, если вы можете использовать настройку управления исходным кодом, чтобы вернуться к фиксации, которая была использована для сборки рассматриваемого приложения, и повторно сгенерировать пакет с дополнительными битами в команду для создания исходной карты.
У меня получилось что-то похожее на это, и он искал удаленный сервер регистрации, который может автоматически делать исходную карту. https://docs.getsentry.com/hosted/clients/javascript/integrations/react-native/ выглядит интересным. но не смог заставить его работать. – noooooooob
А, это было бы интересно. Я просто использую Crashlytics для регистрации ошибок, а затем вручную сопоставляя их с указанным выше методом при исследовании ошибки. Было бы неплохо иметь сервис, который сделал это автоматически, но я его еще не видел. – rmevans9
Мне тоже хотелось бы это увидеть, и по какой-то причине я не ожидаю, что в ближайшее время это добавит Crashlytics. Кто-то должен это построить! –