Babel plugin to transpile import() to a deferred require(), for node
npx @tessl/cli install tessl/npm-babel-plugin-dynamic-import-node@2.3.0babel-plugin-dynamic-import-node is a Babel plugin that transforms ES2015+ dynamic import() statements into deferred require() calls for Node.js environments. It enables developers to use modern dynamic import syntax while maintaining compatibility with Node.js runtime that doesn't natively support ES modules.
npm install babel-plugin-dynamic-import-node --save-devThis is a Babel plugin, not a library for direct import. It's used via Babel configuration:
// In .babelrc or babel.config.js
{
"plugins": ["dynamic-import-node"]
}// If accessing the plugin programmatically (rare)
const plugin = require('babel-plugin-dynamic-import-node');{
"plugins": ["dynamic-import-node"]
}{
"plugins": [
["dynamic-import-node", { "noInterop": true }]
]
}babel --plugins dynamic-import-node script.jsrequire('babel-core').transform('code', {
plugins: ['dynamic-import-node']
});Input code with dynamic import:
Promise.all([
import('./lib/import1'),
import('./lib/import2')
]).then(([Import1, Import2]) => {
console.log(Import1);
console.log(Import2);
});Output code (transformed):
Promise.all([
Promise.resolve().then(() => _interopRequireWildcard(require('./lib/import1'))),
Promise.resolve().then(() => _interopRequireWildcard(require('./lib/import2')))
]).then(([Import1, Import2]) => {
console.log(Import1);
console.log(Import2);
});The default export is a Babel plugin factory function that transforms dynamic import() statements.
/**
* Main Babel plugin factory function (default export)
* @param {Object} api - Babel API object containing template and types
* @returns {Object} Babel plugin configuration object
*/
function plugin(api);The returned plugin object contains:
manipulateOptions(opts, parserOpts) - Adds 'dynamicImport' parser pluginvisitor.Import(path) - AST visitor that transforms import() callsThe plugin accepts an options object when configured:
// Plugin options interface
interface PluginOptions {
/** If true, will not interop the require calls. Avoids using require('module').default on CommonJS modules */
noInterop?: boolean;
}Usage:
{
"plugins": [
["dynamic-import-node", { "noInterop": true }]
]
}