≪ Today I learned. RSS購読
公開日
タグ
JavaScript
著者
ダーシノ(@bc_rikko)

CommonJSとESModulesのデュアルパッケージをつくる

Modules: Dual CommonJS/ES module packagesにかかれていることをrollupを使って対応する場合、以下のようになる。

パッケージ提供側

// rollup.config.js
export default {
  input: './index.js',
  output: [
    { file: './lib/package.cjs', format: 'cjs' },  // Node.js用
    { file: './lib/package.mjs', format: 'es' },   // ESModules用
  ]
}
// package.json
{
  "name": "package",
  "type": "module",
  "files": [
    "lib"
  ],
  // exports で ESM/CJS を分けるので、 ["main": "./index.js"] は不要
  "exports": {
    "import": "./lib/package.mjs",
    "require": "./lib/package.cjs"
  },
}

パッケージ使用側

// client.node.js
// lib/package.cjs が読み込まれる
const pkg = require('package')


// client.esm.js
// lib/package.mjs が読み込まれる(※ブラウザで実行する場合はバンドラーが必要)
import pkg from 'package'

デモ