Skip to content

Latest commit

 

History

History
59 lines (43 loc) · 2.13 KB

README.md

File metadata and controls

59 lines (43 loc) · 2.13 KB

rollup-plugin-cjs-check

A Rollup plugin for checking CommonJS exports against cjs-module-lexer.

Why?

As Node.js defines it, CommonJS modules consist of a module.exports object which can be of any type. When importing a CommonJS, while Node.js is in ESM mode, a CommonJS module will always be reliably importable via a default import.

For modern modules, it's common to use Rollup to bundle and build both CommonJS and ECMAScript Modules (ESM) outputs for any given module. This means that to achieve compatibility between both modules either requires the module to only have a default-export, or to rely on Node.js' compatibility mode.

For better compatibility, Node.js attempts to detect the CommonJS exports of every CommonJS module that's exported. Since sometimes, especially in legacy CommonJS mode, the import of a given CommonJS module built with Rollup cannot be prevented entirely, the module has to be compatible with cjs-module-lexer.

The cjs-module-lexer library is what Node.js uses to detect exports of a given CommonJS module and hence, when choosing how to configure Rollup, the Rollup bundle outputs have to be compatible with it, or otherwise, the module's exports won't be detected.

This plugin checks that cjs-module-lexer agrees with the ECMAScript modules exports that Rollup detects.

For more information, check out the Node.js documentation on CommonJS namespaces.

Requirements

This plugin requires an LTS Node version (v14.0.0+) and Rollup v1.20.0+.

Install

npm install --save-dev rollup-plugin-cjs-check
# or
yarn add -D rollup-plugin-cjs-check
# or
pnpm add --save-dev rollup-plugin-cjs-check

Usage

Import the rollup-plugin-cjs-check plugin in your Rollup configuration file, and add it to your plugins:

import cjsCheck from 'rollup-plugin-cjs-check';

export default {
  input: 'src/index.js',
  output: {
    dir: 'output',
    format: 'cjs'
  },
  plugins: [
    cjsCheck(),
  ]
};