Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

babel-plugin-rewrite-module-path

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

babel-plugin-rewrite-module-path

Rewrite module resolving path

  • 0.0.4
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

babel-plugin-rewrite-module-path

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

NPM

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

  • Take the advantage of rewriting to shorten the importing path. / Config the importing path to a preferred/reader-friendly one.

  • Rewrite module subpath for hacking the resolving mechanism. e.g. in some bundling situation.

  • It could be an alternative approach to declaring exports filed to tell the node modules resolver how to resolve a node_modules package.

    // package.json
    {
        "exports": {
            "modules/*": "./node_modules/*"
        }
    }
    

    For Javascript user, you could use a custom folder name as replacement to node_modules, it's common for implementing a monorepo project. e.g.

    // '../../modules/..' will be rewritten to '../../node_modules/..'
    import singletonModule from '@monorepo/shared/modules/inversify'
    

    For Typescript user, you need additional works to support intelligence through module path rewriting, see typescript paths for more details. e.g.

    // tsconfig.json
    {
        "compilerOptions": {
            "baseUrl": ".",
                "paths": {
                    // we already have type-safe node_modules aliasing, still need a runtime rewriting for development and production building.
                    "@monorepo/shared/modules/*": ["./packages/shared/node_modules/*", "./packages/shared/node_modules/@types/*"]
                }
        }
    }
    

Glance at the rewritable statements

Supports these module importing usages:

  • Import Declaration
  • Export All Declaration
  • Export Named Declaration
  • Dynamic Importing
  • require
  • require.context
  • import.meta.glob
  • import.meta.globEager.

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

  • install:
npm install babel-plugin-rewrite-module-path
  • config via babelrc:
// .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

Keywords

FAQs

Package last updated on 07 Oct 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc