JSPM

obfuscator-io-metro-plugin

2.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 6693
  • Score
    100M100P100Q136363F
  • License MIT

A metro plugin to use javascript-obfuscator library with react-native

Package Exports

  • obfuscator-io-metro-plugin
  • obfuscator-io-metro-plugin/lib/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (obfuscator-io-metro-plugin) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Obfuscator.io Metro Plugin

npm version npm PRs welcome!

This metro plugin obfuscate your React Native bundle using javascript-obfuscator
It only obfuscates your code not the code of node_modules, you can verify the obfuscated bundle by either extracting the index.android.bundle from generated apk or you can find the file at project_root\android\app\build\generated\assets\react\release after assembleRelease process

for iOS if you’re facing any issue check this comment by @andresarezo

Installation

 npm i obfuscator-io-metro-plugin

Usage

Include the plugin in your metro.config.js:

const jsoMetroPlugin = require("obfuscator-io-metro-plugin")(
  {
    // for these option look javascript-obfuscator library options from  above url
    compact: false,
    sourceMap: false,
    controlFlowFlattening: true,
    controlFlowFlatteningThreshold: 1,
    numbersToExpressions: true,
    simplify: true,
    stringArrayShuffle: true,
    splitStrings: true,
    stringArrayThreshold: 1,
  },
  {
    runInDev: false /* optional */,
    logObfuscatedFiles: true /* optional generated files will be located at ./.jso */,
    exts: "/.(j|t)s(x)?$/" /* optional to add json use '(.(j|t)s(x)?$|.json$)' */,
  }
);

module.exports = {
  transformer: {
    getTransformOptions: async () => ({
      transform: {
        experimentalImportSupport: false,
        inlineRequires: false,
      },
    }),
  },
  ...jsoMetroPlugin,
};

runConfig


 name              | description                                   | type     | default
:----------------- |:--------------------------------------------- | --------:|:------------------
 exts              | extension of files to obfuscate               | String   | '/.(j|t)s(x)?$/'

For obfuscation options configuration docs see: https://github.com/javascript-obfuscator/javascript-obfuscator