在react-native中定义自定义transformer后出现如下错误。
./transformer.js
const obfuscatingTransformer = require('react-native-obfuscator');
const filter = filename => {
return filename.startsWith('app');
};
module.exports = obfuscatingTransformer({
obfuscatorOptions: {
compact: true, // default true
controlFlowFlattening: false, // default false
controlFlowFlatteningThreshold: 0.75, // default 0.75
deadCodeInjection: false, // default false
deadCodeInjectionThreshold: 1, // default 0.4
debugProtection: false, // default false
debugProtectionInterval: false, // default false
disableConsoleOutput: true,
identifierNamesGenerator: 'hexadecimal', // default hexadecimal
log: false, // default false
renameGlobals: true, // default false
rotateStringArray: true, // default true
seed: 0, // default 0
selfDefending: false, // default true: not working if true
shuffleStringArray: true, // default true
sourceMapMode: 'separate', // default seperate
splitStrings: true, // default false
splitStringsChunckLength: 10, // default 10
stringArray: true, // default true
stringArrayEncoding: 'rc4', // default false
stringArrayThreshold: 0.75, // default 0.8
target: 'node', // default browser
transformObjectKeys: true, // default false
unicodeEscapeSequence: true,
},
upstreamTransformer: require('metro-react-native-babel-transformer'),
emitObfuscatedFiles: false,
enableInDevelopment: false,
filter: filter,
trace: true,
});
./metro.config.js
/**
* Metro configuration for React Native
* https://github.com/facebook/react-native
*
* @format
*/
const {getDefaultConfig, mergeConfig} = require('metro-config');
module.exports = async () => {
const {
resolver: {sourceExts, assetExts},
} = await getDefaultConfig();
const config1 = {
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: true,
},
}),
babelTransformerPath: require.resolve('react-native-svg-transformer'),
},
resolver: {
assetExts: assetExts.filter(ext => ext !== 'svg'),
sourceExts: [...sourceExts, 'svg'],
},
};
const config2 = {
transformer: {
babelTransformerPath: require.resolve('./transformer'),
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: false,
},
}),
},
};
return mergeConfig(config1, config2);
};
环境详情:
除了 javascript-obfuscator/react-native-obfuscating-transformer 之外,如果还有其他方法可以在 react-native 中混淆 javascript 代码,请提出建议,因为它也不起作用。