Rollup config to create npm modules that support both ECMAScript module and CommonJS
npm install --save-dev rollup-config-module
- Include
rollup --config=node:module
to the build part of your module's npm scripts.
"scripts": {
"build": "rollup --config=node:module",
"pretest": "npm run-script build"
}
- Write your module using ECMAScript
import
/export
instead ofrequire
/module.exports
, and save it asindex.mjs
. - Add
module
field topackage.json
and let it point toindex.mjs
.
"module": "index.mjs"
- Run the build script and you'll see
index.js
is created. - Include both
index.mjs
andindex.js
to the published npm package.
"files": [
"index.js",
"index.mjs"
]
A real world example would help understanding how to create a package with rollup-config-module.
Modules built with this configuration can be used in both ES2015+ projects and traditional require
-based projects.
Users can load index.mjs
with a build tool that supports module
field, for example rollup-plugin-node-resolve and Webpack.
import fn from 'awesome-npm-package';
Users can also load index.js
via Node's built-in require
,
const fn = require('awesome-npm-package');
because index.js
has been compiled from index.mjs
with all import
and export
replaced with require
and module.exports
.
import {inspect} from 'util';
import isNaturalNumber from 'is-natural-number';
export default function(v) {
if (!isNaturalNumber(v)) {
console.log(inspect(v) + 'is not a natural number.');
}
}
↓
'use strict';
var util = require('util');
var isNaturalNumber = require('is-natural-number');
module.exports = function(v) {
if (!isNaturalNumber(v)) {
console.log(util.inspect(v) + 'is not a natural number.');
}
}
ISC License © 2018 Shinnosuke Watanabe