React Native - 构建可靠的源映射

时间:2016-04-27 02:03:09

标签: ios xcode react-native source-maps

我认为我使用Xcode正确创建了一个源地图。需要这个用于生产构建。

我补充说:

react-native bundle --platform ios --entry-file index.ios.js --dev false --bundle-output ./ios/main.jsbundle --assets-dest ./ios --sourcemap-output ./sourcemap/sourcemap.js

Bundle React Native code and images中的build phases,在Xcode中生成一个似乎有用的源图。

但是,当尝试使用以下代码分析带有行号和列号的源地图时,我得不到合适的结果

var sourceMap = require('source-map');
var fs = require('fs');

// read source-map, should be new for every build
fs.readFile('../my-app/src/sourcemap/sourcemap.js', 'utf8', function (err, data) {
    var smc = new sourceMap.SourceMapConsumer(data);

    // replace line and colum numbers with line/col from error output
    console.log(smc.originalPositionFor({
        line: 105132,
        column: 98
    }));
});

我使用Xcode的堆栈跟踪作为测试但是我得到了null。 Xcode部分输出:

2016-04-26 17:50:00.631 [error][tid:com.facebook.React.JavaScript] Can't find variable: dummyVar
2016-04-26 17:50:00.650 [fatal][tid:com.facebook.React.RCTExceptionsManagerQueue] Unhandled JS Exception: Can't find variable: dummyVar
2016-04-26 17:50:00.656 MyApp[311:84730] *** Terminating app due to uncaught exception 'RCTFatalException: Unhandled JS Exception: Can't find variable: dummyVar', reason: 'Unhandled JS Exception: Can't find variable: dummyVar, stack:
render@105132:98

我尝试过多种线号和列号组合。 我知道JS脚本肯定在查看源代码,因为如果我输入例如line: 20 column: 10 我将从Navigator / NavigatorSceneConfigs.js中返回的react-native代码库中获取一行

这仅适用于index.ios.bundle中返回的行号吗?

任何可以指向正确方向的想法都会很棒

由于

1 个答案:

答案 0 :(得分:0)

您可以使用react-native-source-maps等库来帮助您处理发布版本的源映射。 https://github.com/philipshurpik/react-native-source-maps

要生成源地图,您可以使用以下设置:

对于Android,请将其添加到您的android/app/build.gradle文件中。

project.ext.react = [
    ...
    extraPackagerArgs: [
        "--sourcemap-output", "$buildDir/intermediates/assets/release/index.android.bundle.map",
        "--sourcemap-sources-root", "$rootDir/.."
    ]
]

从反应原生0.55开始,你现在可以在iOS上做同样的事了。在您的XCode项目文件中,将Bundle React Native code and images构建阶段更新为:

export NODE_BINARY=node
export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/main.jsbundle.map --sourcemap-sources-root $SRCROOT/..\"
../node_modules/react-native/scripts/react-native-xcode.sh