ReferenceError:找不到变量:React,使用 AustinZuniga/react-native-obfuscator

问题描述 投票:0回答:0

在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 代码,请提出建议,因为它也不起作用。

reactjs react-native obfuscation
© www.soinside.com 2019 - 2024. All rights reserved.