Ответ 1
Для сопоставления источника здесь я об этом говорю:
В моей команде bundle для моей сборки сборки я говорю ей, чтобы создать исходную карту:
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, чтобы получить исходные карты, генерируемые при компиляции выпуска. Там может быть более простой способ, но в основном вы найдете, где он создает команду bundle в методе 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 с исходной картой. Вероятно, вы могли бы очень тщательно изучить свой подход, но я просто пошел с:
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
}));
});
Если строка и столбец должны быть заменены на номер строки и столбца из выведенного выше примера.
Это, очевидно, лучше всего работает, если у вас есть исходные карты, хранящиеся где-то, когда номера строк и столбцов меняются от сборки для сборки по мере изменения вашего кода. Он должен быть довольно близок, хотя, если вы можете использовать настройку управления исходным кодом, чтобы вернуться к фиксации, которая была использована для сборки рассматриваемого приложения, и повторно сгенерировать пакет с дополнительными битами в команду для создания исходной карты.