Home

Awesome

babel-plugin-rewrite-module-path

<div align="center">

Known Vulnerabilities Maintainability publish workflow Test Coverage license GitHub issues NPM bundle size(minified + gzip)

NPM

</div>

Rewrite module resolving path

case 1: Rewrite a specific module subpath to node_modules

- import foo from "@monorepo/shared/modules/foo"
+ import foo from "@monorepo/shared/node_modules/foo"

via

// .babelrc.json
{
  "plugins": ["babel-plugin-rewrite-module-path", {
      "rewriteMapper": {
          "^@monorepo/shared/modules/": "@monorepo/shared/node_modules/"
      }
  }]
}

case 2: Rewrite a cjs importing to esm importing

- import inversify from "inversify/lib/inversify"
+ import inversify from "inversify/es/inversify"

via

// .babelrc.json
{
  "plugins": ["babel-plugin-rewrite-module-path", {
      "rewriteMapper": {
          "^inversify/lib/": "inversify/es/"
      }
  }]
}

case 3: Rewrite a lodash importing to lodash fp importing(for typescript user don't forget to config the paths compiler options of tsconfig.json to adjust intelligence)

- import flatMap from "lodash/flatMap"
+ import flatMap from "lodash/fp/flatMap"

via

// .babelrc.json
{
  "plugins": ["babel-plugin-rewrite-module-path", {
      "rewriteMapper": {
          "^lodash/": "lodash/fp/"
      }
  }]
}

Scenes


Glance at the rewritable statements

Supports these module importing usages:

rewrite

import foo from '@monorepo/shared/modules/foo'

import * as foo from '@monorepo/shared/modules/foo'

import '@monorepo/shared/modules/foo'

export * from '@monorepo/shared/modules/foo'

export { bar } from '@monorepo/shared/modules/foo'

export { default as foo } from '@monorepo/shared/modules/foo'

const foo = await import('@monorepo/shared/modules/foo')

const { bar } = await import('@monorepo/shared/modules/foo')

import('@monorepo/shared/modules/foo')

const foo = require('@monorepo/shared/modules/foo')

const foo = import.meta.glob('@monorepo/shared/modules/foo')

const foo = import.meta.globEager('@monorepo/shared/modules/foo')

const foo = require.context('@monorepo/shared/modules/foo')

to

import foo from '@monorepo/shared/node_modules/foo'

import * as foo from '@monorepo/shared/node_modules/foo'

import '@monorepo/shared/node_modules/foo'

export * from '@monorepo/shared/node_modules/foo'

export { bar } from '@monorepo/shared/node_modules/foo'

export { default as foo } from '@monorepo/shared/node_modules/foo'

const foo = await import('@monorepo/shared/node_modules/foo')

const { bar } = await import('@monorepo/shared/node_modules/foo')

import('@monorepo/shared/node_modules/foo')

const foo = require('@monorepo/shared/node_modules/foo')

const foo = import.meta.glob('@monorepo/shared/node_modules/foo')

const foo = import.meta.globEager('@monorepo/shared/node_modules/foo')

const foo = require.context('@monorepo/shared/node_modules/foo')

Usage

npm install babel-plugin-rewrite-module-path
// .babelrc.json
{
  "plugins": ["babel-plugin-rewrite-module-path", {
      "rewriteMapper": {
          "/modules/", "/node_modules/"
      }
  }]
}

Full Option

The plugin options signatures:

export type RewriteModulePathOptions = {
    rewriteMapper: Record<string, string>,
    transform?: {
        importDeclaration?: boolean,
        exportDeclaration?: boolean,
        dynamicImport?: boolean,
        importGlob?: boolean,
        importGlobEager?: boolean,
        require?: boolean,
        requireContext?: boolean,
    }
}

The default options:

export const defaultRewriteModulePathOptions = {
    transform: {
        importDeclaration: true,
        exportDeclaration: true,
        dynamicImport: true,
        importGlob: true,
        importGlobEager: true,
        require: true,
        requireContext: true,
    }
}

References