Fix ES module/CommonJS mismatch in shared package

- Rename CommonJS build output from .js to .cjs extensions
- Add .js extensions to ESM imports (required by Node.js)
- Add .cjs extensions to CommonJS requires
- Add post-build scripts for both ESM and CommonJS builds
- Update package.json exports to reference .cjs files for require()

Fixes: ReferenceError: exports is not defined in ES module scope

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-07-08 15:23:06 +02:00
co-authored by Copilot
parent 018a7aefc7
commit d486655f54
3 changed files with 62 additions and 3 deletions
+3 -3
View File
@@ -5,8 +5,8 @@
"type": "module",
"scripts": {
"prebuild": "barrelsby --directory src --delete --single",
"build:esm": "tsc -p tsconfig.esm.json",
"build:cjs": "tsc -p tsconfig.cjs.json",
"build:esm": "tsc -p tsconfig.esm.json && node scripts/postbuild-esm.cjs",
"build:cjs": "tsc -p tsconfig.cjs.json && find dist/cjs -name \"*.js\" -type f -exec sh -c 'mv \"$1\" \"${1%.js}.cjs\"' _ {} \\; && node scripts/postbuild.cjs",
"build": "npm run prebuild && npm run build:esm && npm run build:cjs",
"lint": "eslint ."
},
@@ -14,7 +14,7 @@
".": {
"types": "./dist/types/index.d.ts",
"import": "./dist/esm/index.js",
"require": "./dist/cjs/index.js"
"require": "./dist/cjs/index.cjs"
}
},
"types": "./dist/types/index.d.ts",
+30
View File
@@ -0,0 +1,30 @@
const fs = require('fs');
const path = require('path');
// Recursively process all .js files in esm directory
function processDirectory(dir) {
const files = fs.readdirSync(dir);
files.forEach(file => {
const filePath = path.join(dir, file);
const stat = fs.statSync(filePath);
if (stat.isDirectory()) {
processDirectory(filePath);
} else if (file.endsWith('.js')) {
// Read the file
let content = fs.readFileSync(filePath, 'utf8');
// Replace import/export statements to add .js extension
// Replace from "./path" with from "./path.js" (for relative imports only)
content = content.replace(/from ["'](\.[^"']*?)(?<!\.js)["']/g, 'from "$1.js"');
// Write back
fs.writeFileSync(filePath, content, 'utf8');
console.log(`✓ Updated ${filePath}`);
}
});
}
processDirectory('./dist/esm');
console.log('✓ ESM post-build processing complete');
+29
View File
@@ -0,0 +1,29 @@
const fs = require('fs');
const path = require('path');
// Recursively process all .cjs files
function processDirectory(dir) {
const files = fs.readdirSync(dir);
files.forEach(file => {
const filePath = path.join(dir, file);
const stat = fs.statSync(filePath);
if (stat.isDirectory()) {
processDirectory(filePath);
} else if (file.endsWith('.cjs')) {
// Read the file
let content = fs.readFileSync(filePath, 'utf8');
// Replace require statements to add .cjs extension
content = content.replace(/require\("([^"]*?)(?<!\.cjs)"\)/g, 'require("$1.cjs")');
// Write back
fs.writeFileSync(filePath, content, 'utf8');
console.log(`✓ Updated ${filePath}`);
}
});
}
processDirectory('./dist/cjs');
console.log('✓ Post-build processing complete');