Registry / security / metro-minify-obfuscator

metro-minify-obfuscator

JSON →
library1.0.1jsnpmunverified

A Metro bundler minifier plugin that integrates javascript-obfuscator for React Native apps. Current stable version is 1.0.1. It obfuscates during the minification step, preserving correct source maps, unlike alternatives that obfuscate during transformation. Provides configurable filtering, default obfuscator options (control flow flattening, string splitting, self-defending), and supports both CJS and ESM project configurations via metro.config.js. Requires a default minifier (metro-minify-uglify or metro-minify-terser) when using file filtering.

npm install metro-minify-obfuscator
INSTALL
IMPORT
SIG · METRO-MINIFY-OBFUS
M
metro-minify-obfuscator
securityjavascriptv1.0.1
harness data pending
Install & Compatibility
Where this runs

No compatibility data collected yet for this library.

Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

metro-minify-obfuscator
module.exports = { transformer: { minifierPath: 'metro-minify-obfuscator' } }
const obfuscator = require('metro-minify-obfuscator')
This package is used as a string path in Metro config, not imported directly in application code. The package name is passed as a string to minifierPath in metro.config.js.
minifierConfig
minifierConfig: { defaultMinifierPath: require('metro-minify-uglify'), filter: (filename) => true }
minifierConfig: { obfuscatorOptions: { ... } }
In v1.0.x, minifierConfig must include defaultMinifierPath if filter or includeNodeModules is set. Simple configs without filtering can omit defaultMinifierPath.
obfuscatorOptions
minifierConfig: { obfuscatorOptions: { disableConsoleOutput: true } }
minifierConfig.ObfuscatorOptions (capital O) or 'obfuscatorOptions' misspelled
obfuscatorOptions is a sub-property of minifierConfig, not at top level. Options are passed directly to javascript-obfuscator.

Configures Metro to use metro-minify-obfuscator as the minifier, with a file filter and default options.

// metro.config.js const defaultMinifier = require('metro-minify-uglify'); module.exports = { transformer: { minifierPath: 'metro-minify-obfuscator', minifierConfig: { defaultMinifierPath: defaultMinifier, filter: (filename) => filename.endsWith('.js'), includeNodeModules: false, obfuscatorOptions: { compact: true, controlFlowFlattening: true, controlFlowFlatteningThreshold: 0.75, identifierNamesGenerator: 'hexadecimal', numbersToExpressions: true, splitStrings: true, splitStringsChunkLength: 3, transformObjectKeys: true, simplify: true, disableConsoleOutput: true, selfDefending: true, unicodeEscapeSequence: true, }, }, }, }; // Run: npx react-native start --reset-cache
Debug
Known issues
breakingv1.0.x changed minifierConfig structure: requires defaultMinifierPath when using filter/includeNodeModules. Old configs without defaultMinifierPath will break if filter is set.
fix
Add defaultMinifierPath property pointing to an installed minifier (metro-minify-uglify or metro-minify-terser). If not using filter, omit or set to false.
affects: >=1.0.0
gotchaNot all javascript-obfuscator options are guaranteed to work with React Native; certain options may break the app.
fix
Test obfuscatorOptions thoroughly. Common problematic options include stringArray (disabled by default) and selfDefending (can cause app crashes). Start with default options and add incrementally.
affects: *
gotchaMust run packager with --reset-cache after making config changes; otherwise old cached bundles may be served without obfuscation.
fix
Run `npx react-native start --reset-cache` or delete node_modules/.metro folder.
affects: *
deprecatedv0.x.x (initial fork from metro-minify-uglify) is deprecated; upgrade to v1.x.x for filter support.
fix
Update metro.config.js to include defaultMinifierPath as shown in the README release notes.
affects: <1.0.0
Errors
Common errors & fixes
Error: Cannot find module 'metro-minify-uglify'
defaultMinifierPath references an uninstalled package
fix
Install the package: npm install --save-dev metro-minify-uglify (or metro-minify-terser for newer RN).
Error: Minifier threw error: JavaScript Obfuscator Error: Cannot read property 'length' of undefined
Invalid obfuscatorOptions passed to javascript-obfuscator; often caused by wrong option name or value type.
fix
Check javascript-obfuscator documentation for correct option names. Ensure options are under obfuscatorOptions key, not top-level minifierConfig.
Error: Invalid configuration: 'minifierPath' must be a string. Received undefined
metro.config.js is not properly formatted or minifierPath is missing
fix
Ensure minifierPath is set to 'metro-minify-obfuscator' as a string in transformer config.
EventEmitter.removeListener - removeListener method is overridden by polyfills
Some obfuscator options, like selfDefending, may replace native prototypes causing React Native warnings.
fix
Disable selfDefending option: set to false in obfuscatorOptions, or test other options that might affect prototypes.
Upgrade
Version history
1.0.1latest on npm
Audit
Dependencies
javascript-obfuscatorrequiredCore obfuscation engine; used at runtime to process files.
metro-minify-uglifyoptionalRequired as default minifier when filter or includeNodeModules options are set; fallback for non-obfuscated files.
metro-minify-terseroptionalAlternative default minifier for newer React Native versions; required if filter/includeNodeModules is used.
Agent activity
4 hits · last 30 days
node
4
Resources
metro-minify-obfuscator — npm install metro-minify-obfuscator · libregistry