babel-plugin-module-extension-resolver

raw JSON →
1.0.0 verified Sat Apr 25 auth: no javascript

Babel plugin that resolves and maps module extensions in import/require statements. Version 1.0.0 is the latest stable release, with maintenance releases planned when necessary. It transforms extensionless imports to explicit extensions (e.g., './dir/lib' -> './dir/lib.js'), configurable via srcExtensions, dstExtension, and extensionsToKeep options. Unlike babel-plugin-extension-resolver, it supports TypeScript, dynamic imports, and export from syntax. Works with CommonJS and ES modules.

error Error: Cannot find module 'babel-plugin-module-extension-resolver'
cause Plugin not installed or path incorrect in .babelrc.
fix
Run 'npm install -D babel-plugin-module-extension-resolver' and use 'module-extension-resolver' (not full path) in .babelrc.
error ReferenceError: require is not defined (when using ES modules)
cause Using CommonJS require in ES module context; plugin works but Babel may not transform if modules are set to false.
fix
Use ES module syntax (import) instead of require, or set @babel/preset-env modules to 'auto' or 'commonjs'.
error TypeError: Cannot read property 'replace' of undefined
cause Invalid options syntax in .babelrc; likely missing array brackets around plugin options.
fix
Ensure options are specified as: ["module-extension-resolver", { ... }].
error Module not found: Error: Can't resolve './dir/lib' in '...'
cause File does not exist and plugin cannot resolve; or extension mapping leads to missing file.
fix
Verify the source file exists with one of the srcExtensions. Check 'srcExtensions' list includes the file extension used. If file is .ts, ensure '.ts' is in srcExtensions.
error Unexpected token (Error when parsing dynamic import)
cause Babel parser version too old to support import() syntax.
fix
Update Babel to version 7.8.0 or later, or ensure @babel/plugin-syntax-dynamic-import is included.
breaking Options changed in v0.3.0: 'extensions' renamed to 'srcExtensions', 'map' replaced by 'extensionsToKeep' and new 'dstExtension'.
fix Update .babelrc to use new option names: set 'srcExtensions', 'dstExtension', and 'extensionsToKeep' instead of 'extensions' and 'map'.
breaking Node.js >=8.0.0 required since v0.2.0.
fix Upgrade Node.js to version 8 or higher.
breaking Dynamic imports support added in v1.0.0-rc.2; previous versions ignore dynamic import() calls.
fix Upgrade to v1.0.0-rc.2 or later to resolve dynamic imports.
gotcha Module paths not beginning with '.' (e.g., 'dir') are not resolved; they are left unchanged.
fix Ensure all relative import paths start with './' or '../' to be resolved. For absolute or bare specifiers, consider using other plugins or webpack aliases.
gotcha The plugin transforms imports regardless of file extension; use 'keepFileExtension' Babel option or set 'extensionsToKeep' to avoid unwanted changes.
fix Pass '--keep-file-extension' to Babel CLI or set 'extensionsToKeep' to preserve specific extensions like '.mjs'.
gotcha The dstExtension default is '.js'; for TypeScript projects, ensure output extension matches your target (e.g., '.mjs' for ES modules).
fix Set 'dstExtension' option to '.mjs' or '.cjs' as needed. For ES modules with TypeScript, set "modules": false in @babel/preset-env.
npm install babel-plugin-module-extension-resolver
yarn add babel-plugin-module-extension-resolver
pnpm add babel-plugin-module-extension-resolver

Shows basic usage: installation, .babelrc configuration, and how extensionless imports are resolved to .js (or .json kept).

// Install
npm i -D babel-plugin-module-extension-resolver

// .babelrc
{
  "plugins": ["module-extension-resolver"]
}

// Input: src/main.js
require("./dir/lib");
require("./dir/lib.js");
require("./dir");
require("./settings");

// Output after Babel:
require("./dir/lib.js");
require("./dir/lib.js");
require("./dir/index.js");
require("./settings.json");