Skip to content

Commit 4228d9b

Browse files
Add script to auto-generate package exports field
1 parent 747a395 commit 4228d9b

2 files changed

Lines changed: 48 additions & 0 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
"format:check": "prettier --check .",
7070
"prepare": "husky",
7171
"docs": "typedoc",
72+
"gen:exports": "node scripts/gen-exports.js",
7273
"gen:indexes": "node scripts/gen-indexes.js"
7374
},
7475
"devDependencies": {

scripts/gen-exports.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { join, resolve } from 'path';
2+
import { readdirSync, readFileSync, statSync, writeFileSync } from 'fs';
3+
4+
const cwd = process.cwd();
5+
6+
const DIST_DIR = resolve(cwd, 'dist');
7+
const packageJson = resolve(cwd, 'package.json');
8+
9+
function getExportsEntries() {
10+
const entries = {};
11+
const dirs = readdirSync(DIST_DIR);
12+
for (const index in dirs) {
13+
const path = join(DIST_DIR, dirs[index]);
14+
const name = dirs[index];
15+
const exportPath = `./${name}`;
16+
if (statSync(path).isDirectory()) {
17+
entries[exportPath] = {
18+
import: `./dist/${name}/index.js`,
19+
require: `./dist/${name}/index.cjs`,
20+
types: `./dist/${name}/index.d.ts`,
21+
};
22+
}
23+
}
24+
return entries;
25+
}
26+
27+
function generateExportsField() {
28+
const exportsField = {
29+
'.': {
30+
import: './dist/index.js',
31+
require: './dist/index.cjs',
32+
types: './dist/index.d.ts',
33+
},
34+
...getExportsEntries(),
35+
};
36+
37+
return exportsField;
38+
}
39+
40+
(() => {
41+
console.log('Generating "exports" field for package.json...');
42+
const pkg = JSON.parse(readFileSync(packageJson, 'utf8'));
43+
pkg.exports = generateExportsField();
44+
console.log("Writing 'exports' field to package.json...");
45+
writeFileSync(packageJson, JSON.stringify(pkg, null, 2) + '\n', 'utf8');
46+
console.log('"exports" field generated successfully!');
47+
})();

0 commit comments

Comments
 (0)