babel-plugin-transform-amd-to-es6

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

Convert AMD modules (define/require) to ES6 import/export statements using a Babel plugin. Current version 1.0.2, maintained via automated releases. Key differentiator: supports complex AMD patterns including UMD, nested requires, and custom module ID mapping. Provides an option to register ES6 exports as AMD modules for client-side RequireJS compatibility using a configurable define function. Designed for projects migrating from AMD to ES modules while retaining client-side AMD loader support. Alternatives include amd-to-es6 and manual conversion scripts, but this plugin integrates directly into Babel 7 pipelines.

error Error: Plugin transform-amd-to-es6: Cannot find module '@babel/core'
cause @babel/core is not installed or not in node_modules.
fix
Run npm install --save-dev @babel/core
error Error: Unknown option: .umdToAMDModules. Check if it is valid.
cause Incorrect nested options syntax in Babel config (options passed as a separate array element).
fix
Use ['transform-amd-to-es6', { options }] inside the plugins array, not ['transform-amd-to-es6', { options }] as separate arguments.
error TypeError: Cannot read property 'body' of undefined
cause The plugin received a non-AMD syntax or a malformed AST node. May occur with plugins that modify AST before this one.
fix
Ensure the plugin runs after any syntax plugins. Reorder your Babel plugins: place 'transform-amd-to-es6' last.
gotcha Module IDs must match filenames for correct resolution after transformation.
fix Use defineModuleId option to map your AMD module IDs to actual file paths (e.g., strip prefixes).
gotcha If umdToAMDModules is enabled, the plugin may not correctly handle plain UMD patterns that don't follow the expected AMD wrapper.
fix Test your UMD modules individually; disable umdToAMDModules if you only have native AMD.
deprecated The plugin is designed for Babel 7; does not support Babel 6.
fix Upgrade to Babel 7 (@babel/core). Babel 6 users should use alternative plugins or manual conversion.
gotcha The defineFunctionName option conflicts with existing code if another global uses the same function name (default '__AMD').
fix Choose a unique function name (e.g., '__registerAMD') to avoid collisions.
gotcha Nested require() calls inside AMD modules may not be transformed unless ignoreNestedRequires is set to false.
fix Set ignoreNestedRequires: false if you need nested requires converted to dynamic import().
npm install babel-plugin-transform-amd-to-es6
yarn add babel-plugin-transform-amd-to-es6
pnpm add babel-plugin-transform-amd-to-es6

Converts AMD module (define with dependencies and return) into ES6 import/export with optional AMD registration client-side.

// .babelrc.js
module.exports = {
  plugins: [
    [
      'transform-amd-to-es6',
      {
        umdToAMDModules: true,
        amdToES6Modules: true,
        amdDefineES6Modules: true,
        ignoreNestedRequires: true,
        defineFunctionName: '__AMD',
        defineModuleId: (moduleId) => moduleId.replace(/^path\//, ''),
        ignores: []
      }
    ]
  ]
};

// Example AMD input (module.js):
define('myModule', ['dep1', 'dep2'], function(dep1, dep2) {
  return {
    greet: function() { console.log(dep1.name); }
  };
});

// Transformed output:
import dep1 from 'dep1';
import dep2 from 'dep2';
const __AMD__default = {
  greet: function() { console.log(dep1.name); }
};
export default __AMD__default;
__AMD('myModule', __AMD__default);