[READ-ONLY] Mirror of https://github.com/sxzz/rolldown-plugin-require-cjs. Transform ESM imports to CJS requires when the imported module is pure CJS
0

Configure Feed

Select the types of activity you want to include in your feed.

TypeScript 95.1%
JavaScript 4.9%
49 1 13

Clone this repository

https://git.vm.fail/sxzz.dev/rolldown-plugin-require-cjs https://git.vm.fail/did:plc:4ozl5a4hmyro6776naewukey
ssh://git@knot1.tangled.sh:2222/sxzz.dev/rolldown-plugin-require-cjs ssh://git@knot1.tangled.sh:2222/did:plc:4ozl5a4hmyro6776naewukey

For self-hosted knots, clone URLs may differ based on your setup.


README.md

rolldown-plugin-require-cjs#

npm version npm downloads Unit Test

Transform ESM imports to CJS requires when the imported module is pure CJS.

Why?#

Some packages only provide CJS builds (e.g., typescript, @babel/parser), and importing them using ESM syntax increases Node's cjs-module-lexer overhead. This plugin converts ESM imports to CJS requires for such pure CJS packages, allowing Node to skip the cjs-module-lexer step and improve performance.

If performance is insignificant for your project, please do not use this plugin, as it introduces additional complexity and maintenance overhead.

See more: https://x.com/sanxiaozhizi/status/1968580207322808812

Appeal#

We encourage the JavaScript ecosystem to continue its transition toward ESM. If you maintain a package that is still CJS-only, please consider offering an ESM build or migrating fully to ESM. Doing so will reduce reliance on plugins like this one and enhance the overall performance of the ecosystem.

Install#

npm i -D rolldown-plugin-require-cjs

Options#

export interface Options {
  include?: Array<string | RegExp> | string | RegExp
  exclude?: Array<string | RegExp> | string | RegExp
  order?: 'pre' | 'post' | undefined
  /**
   * A function to determine whether a module should be transformed.
   * Return `true` to force transformation, `false` to skip transformation,
   * or `undefined` to let the plugin decide automatically.
   */
  shouldTransform?: string[] | TransformFn
}

/**
 * @returns A boolean or a promise that resolves to a boolean,
 * or `undefined` to let the plugin decide automatically.
 */
export type TransformFn = (
  /**
   * The module ID (path) being imported.
   */
  id: string,
  /**
   * The module ID (path) of the importer.
   */
  importer: string,
) => Awaitable<boolean | undefined | void>

Example#

RequireCJS({
  shouldTransform(id, importer) {
    // Force transformation for specific dependencies
    if (id === 'typescript') return true
    // Skip transformation for specific dependencies
    if (id === 'esm-only') return false
    // Auto-detect for other dependencies
    return undefined
  },
})

Sponsors#

License#

MIT License © 2025-PRESENT Kevin Deng