{"id":22135,"library":"rollup-plugin-module-replacement","title":"rollup-plugin-module-replacement","description":"A Rollup plugin (v1.2.1) that replaces module paths during bundling, similar to Webpack's NormalModuleReplacementPlugin. Supports string or regex pattern matching with replacement strings or functions for dynamic rewrites. Ideal for environment-specific builds (e.g., swapping mock vs production modules). Unlike rollup-plugin-alias, it does not resolve modules internally, allowing custom resolvers (e.g., rollup-plugin-node-resolve) to be passed in. Released under MIT, with irregular updates (last in 2020).","status":"maintenance","version":"1.2.1","language":"javascript","source_language":"en","source_url":"https://github.com/Acionyx/rollup-plugin-module-replacement","tags":["javascript","rollup","rollup-plugin","resolve","module-replacement"],"install":[{"cmd":"npm install rollup-plugin-module-replacement","lang":"bash","label":"npm"},{"cmd":"yarn add rollup-plugin-module-replacement","lang":"bash","label":"yarn"},{"cmd":"pnpm add rollup-plugin-module-replacement","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency required for plugin compatibility.","package":"rollup","optional":false}],"imports":[{"note":"Plugin is ESM-only; CJS require will fail in Rollup ES configs.","wrong":"const replacement = require('rollup-plugin-module-replacement')","symbol":"default","correct":"import replacement from 'rollup-plugin-module-replacement'"},{"note":"No named export; must use default import.","wrong":"import { replacement } from 'rollup-plugin-module-replacement'","symbol":"replacement","correct":"import replacement from 'rollup-plugin-module-replacement'"},{"note":"Only default export; no alias export exists.","wrong":"import { replaceModules } from 'rollup-plugin-module-replacement'","symbol":"replacement as named","correct":"import replacer from 'rollup-plugin-module-replacement'"}],"quickstart":{"code":"// rollup.config.js\nimport replacement from 'rollup-plugin-module-replacement';\nimport resolve from 'rollup-plugin-node-resolve';\n\nconst customResolver = resolve({ extensions: ['.mjs', '.js', '.jsx'] });\n\nexport default {\n  input: 'src/index.js',\n  output: { file: 'dist/bundle.js', format: 'cjs' },\n  plugins: [\n    replacement(\n      {\n        entries: [\n          {\n            find: /src\\/(.*)/,\n            replacement: (importee) => {\n              const env = process.env.BUILD_ENV || 'prod';\n              return importee.replace('src', `src-${env}`);\n            }\n          }\n        ]\n      },\n      customResolver\n    ),\n    resolve()\n  ]\n};","lang":"javascript","description":"Demonstrates regex-based module replacement with a custom resolver using rollup-plugin-node-resolve."},"warnings":[{"fix":"Pass a resolver plugin (e.g., rollup-plugin-node-resolve) as the second argument or ensure replacement results in an absolute path.","message":"Plugin does not resolve replaced paths internally; if no customResolver is passed, the replacement string is used as-is in Rollup's resolve hook, which may lead to unresolved modules.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Order entries from most specific to least specific to avoid unintended matches.","message":"The order of entries matters: first matching rule is applied. Subsequent rules are not processed for the same import.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Replace imports from 'rollup-plugin-node-resolve' to '@rollup/plugin-node-resolve'.","message":"rollup-plugin-node-resolve is now @rollup/plugin-node-resolve.","severity":"deprecated","affected_versions":">=1.2.0"},{"fix":"Always return a string from the replacement function. For unmatched patterns, return the original importee.","message":"Replacement function must return a string; returning undefined or null will cause Rollup to fail resolving module.","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Ensure replacement produces a valid path, or pass a customResolver as second argument to the plugin.","cause":"Module replacement did not map to an existing file, or no customResolver handled the replaced path.","error":"Error: Could not resolve './some-module' from src/index.js"},{"fix":"Use: import replacement from 'rollup-plugin-module-replacement'","cause":"Incorrect import: using named import instead of default import.","error":"TypeError: replacement is not a function"},{"fix":"Use this plugin only for module path replacement, not for content transformation.","cause":"Plugin only uses resolveId hook; trying to use it for code transformation will fail.","error":"The plugin 'rollup-plugin-module-replacement' does not support the 'transform' hook."}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}