Skip to content

Commit 92b68cc

Browse files
author
Mike Valeriano
committed
chore: use rollup/vite plugin to deal with deps and builtins in bundle
1 parent 5b4405b commit 92b68cc

4 files changed

Lines changed: 57 additions & 25 deletions

File tree

biome.jsonc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,21 @@
4848
}
4949
},
5050
"overrides": [
51+
{
52+
// TODO: check later
53+
// noUnresolvedImports not working properly, flags node builtins
54+
// useExplicitType breaking type inference
55+
"includes": ["**/*"],
56+
"linter": {
57+
"rules": {
58+
"nursery": {
59+
"noUnresolvedImports": "off",
60+
"useExplicitType": "off"
61+
}
62+
}
63+
}
64+
},
65+
5166
{
5267
// test files, config files, and some scripts
5368
// export defaults from them, and also import from node

package-lock.json

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
"@commitlint/config-conventional": "^19.8.1",
3636
"@types/node": "^24.0.3",
3737
"husky": "^9.1.7",
38+
"rollup-plugin-node-externals": "^8.0.1",
3839
"tsx": "^4.20.3",
3940
"typescript": "^5.8.3",
4041
"vite": "^6.3.5"

vite.config.ts

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { glob } from "node:fs/promises";
22
import { fileURLToPath } from "node:url";
3+
import { nodeExternals } from "rollup-plugin-node-externals";
34
import { defineConfig } from "vite";
4-
import pkg from "./package.json" with { type: "json" };
55

66
const entryFiles: string[] = [];
77
for await (const file of glob("src/**/*.ts")) {
@@ -18,45 +18,37 @@ export default defineConfig({
1818
},
1919
},
2020

21-
plugins: [],
21+
plugins: [
22+
nodeExternals({
23+
// packages to be set as internal
24+
exclude: ["@mkvlrn/result"],
25+
}),
26+
],
2227

2328
build: {
2429
target: "esnext",
2530
lib: {
2631
entry: entryFiles,
2732
formats: ["es"],
28-
// biome-ignore lint/nursery/useExplicitType: not sure
29-
fileName: (_format, entryName) => `${entryName}.js`,
33+
fileName: (_, entryName) => `${entryName}.js`,
3034
},
3135
outDir: "./build",
3236
emptyOutDir: true,
3337
rollupOptions: {
34-
// biome-ignore lint/nursery/useExplicitType: not sure
35-
external: (id) => {
36-
// node builtins
37-
if (id.startsWith("node:")) {
38-
return false;
39-
}
40-
41-
// packages that should be bundled
42-
const internals = ["@mkvlrn/result"];
43-
if (internals.includes(id)) {
44-
return false;
45-
}
46-
47-
// external dependencies
48-
if (Object.keys(pkg.dependencies ?? {}).some((dep) => id.startsWith(dep))) {
49-
return true;
50-
}
51-
},
5238
output: {
5339
preserveModules: true,
5440
preserveModulesRoot: "src",
55-
// biome-ignore lint/nursery/useExplicitType: not sure
56-
entryFileNames: ({ name }) => `${name.replace("node_modules/", "_internals/")}.js`,
41+
// this outputs bundled/internal packages to a directory named _internal
42+
entryFileNames: ({ name }) => `${name.replace("node_modules/", "_internal/")}.js`,
43+
},
44+
},
45+
minify: "terser",
46+
terserOptions: {
47+
compress: false,
48+
format: {
49+
comments: false,
5750
},
5851
},
59-
minify: false,
6052
},
6153

6254
optimizeDeps: {

0 commit comments

Comments
 (0)