Dla odwzorowania źródłowego tutaj jest sposób przejść o nim:
W moim wiązki polecenia dla mojego kompilacji produkcyjnej Mówię to, aby wygenerować mapę źródło:
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 - musiałem zmodyfikować plik android/app/react.gradle, aby wygenerować mapy źródłowe podczas kompilacji wydania. Nie może być łatwiejszy sposób, ale w zasadzie można znaleźć gdzie buduje polecenia wiązki w metodzie bundleReleaseJsAndAssets i dodać trochę źródło mapie, aby je:
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")
}
Ścieżka wyjściowa wygląda nieco dziwnie, ale to stawia go na swój poziom root (to samo miejsce co iOS.) Chciałem to w ten sposób. Możesz oczywiście umieścić go w dowolnym miejscu).
Następnie, gdy wystąpi błąd z numerem linii, który oznacza, że nic nie jest uruchamiane przez pakiet NPM "mapy źródłowej". Można prawdopodobnie uzyskać bardzo skomplikowane ze swoim podejściu, ale ja po prostu poszedł z:
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
}));
});
Gdzie wiersz i kolumna powinna być zastąpiona linią witka i numer kolumny z wyjściem przykładzie powyżej.
To oczywiście działa najlepiej, jeśli masz zapisane gdzieś mapy źródłowe, a numery kolumn zmieniają się z kompilacji na kompilację w miarę zmiany kodu. Powinno to jednak być dość bliskie, jeśli możesz użyć wybranej konfiguracji kontroli źródła, aby powrócić do zatwierdzenia, które zostało użyte do zbudowania aplikacji i ponownie wygenerować pakiet z dodatkowymi bitami do polecenia, aby wygenerować mapę źródłową.
W rezultacie otrzymałem coś podobnego do tego i szukałem zdalnego serwera rejestrującego, który może automatycznie wykonać mapę źródłową. https://docs.getsentry.com/hosted/clients/javascript/integrations/react-native/ wygląda interesująco. ale nie udało się zmusić go do działania. – noooooooob
Ah, to byłoby interesujące. Używam Crashlytics do rejestrowania błędów, a następnie ręcznego mapowania ich za pomocą powyższej metody podczas badania błędu. Byłoby miło mieć usługę, która zrobiła to automatycznie, ale jeszcze jej nie widziałem. – rmevans9
Bardzo chciałbym to zobaczyć iz jakiegoś powodu nie spodziewam się, aby w najbliższym czasie pojawiła się obsługa tego dodatku do Crashlytics. Ktoś powinien to zbudować! –