commonify
                                
                                 commonify copied to clipboard
                                
                                    commonify copied to clipboard
                            
                            
                            
                        Recursively publish ESM packages as CommonJS!
Commonify.js
For us who are still relying on CommonJS, or using Electron which does not support ESM.
🆕 See also build-electron
I made this tool that makes it easy to:
- Pull any ESM package from npm
- Transpile it from ESM to CommonJS using babel
- Publish it under a custom npm scope
- Recursively do the same for all dependencies
It is mostly an experiment, and it feels like a step back in terms of the ecosystem moving to ESM, so if anyone has any other great ideas, please submit an issue! I have thought about the possibility of doing something similar to the node_modules folder in an npm postinstall script.
Usage
First create your scope here: https://www.npmjs.com/org/create
git clone https://github.com/mifi/commonify.git
cd commonify
yarn
node cli.mjs lowdb 3.0.0 myscope
This will create the package @myscope/lowdb and its dependencies ready to publish to npm.
Example packages
I will publish commonified packages to the @commonify scope:
- @commonify/lowdb
- @commonify/steno
- @commonify/execa
- @commonify/strip-final-newline
- @commonify/onetime
- @commonify/mimic-fn
- @commonify/npm-run-path
- @commonify/path-key
- @commonify/is-stream
Todo
- Support already scoped packages
- Must support dual modules (they also have "type": "module"set). Example: https://github.com/yargs/yargs-parser/blob/main/package.json
- Automate when upstream package version updates
- Auto-generate a list of versions and their version corresponding to upstream version