3 ms·
dependencies that we need which are still CJS-only are what kill our ability to switch completely to ESM :(
by herpdyderp 3y ago
dependencies that we need which are still CJS-only are what kill our ability to switch completely to ESM :(
- WorldMaker 3y agoYou can use Parcel or esbuild just on that CJS dependency (rather than as a top-level bundler for your whole project), and then cache the ESM result somewhere. If the package is that old and that unmaintained you can just about cache those ESM builds indefinitely. (That's what Vite kind of does under the hood. That's what snowpack used to do.) I think npm should probably support doing that at install time. ESM importing CJS works in Node, mostly, now, but it does have quite a bit of runtime overhead and prebaking it would be good. Especially because it is unlikely to ever see a CJS loader in the browser (and that would be awful if it did exist).
- no_wizard 3y agoif you use a package manager like `pnpm` you can use the `.pnpmfile.cjs`[0] to intercept packages and add `"type": "commonjs"` to the package.json. This tells node that it needs to load it as a CommonJS package and should work fine with ESM. There's also creating a require function from `node:module` package[1] [0]: https://pnpm.io/pnpmfile https://pnpm.io/pnpmfile [1]: https://nodejs.org/dist/latest-v18.x/docs/api/module.html#modulecreaterequirefilename https://nodejs.org/dist/latest-v18.x/docs/api/module.html#mo...