-
Notifications
You must be signed in to change notification settings - Fork 14
Description
When using the usual ESM stuff, I still resolve to index.js instead of index.esm.js.
import { createRequire } from "node:module";
const require = createRequire(import.meta.url);
console.table({
"is-what": {
esm: import.meta.resolve("is-what"),
cjs: require.resolve("is-what"),
},
tosource: {
esm: import.meta.resolve("tosource"),
cjs: require.resolve("tosource"),
},
});(Using is-what as an example of it done OK-ly)
I think this could be solved by using modern exports: {} conditions instead of main and module? But even this is not recommended so as to avoid the dual package hazard https://nodejs.org/api/packages.html#packages_dual_package_hazard where you can get two copies of the package code in your webpack/vite/rollup/parcel/whatever bundle.js file.
The idealized solution is to either a) only export an ESM version or b) export an ESM wrapper that just export {} from "./module.cjs" so that there's only one canonical source of code or c) only export a CJS version.
Funnily enough, in the package's current state it doesn't suffer from the dual package hazard since it currently only exports CommonJS 🤣
