@jpapini/vite-config
Version:
Custom Vite.js configuration for TypeScript libraries.
82 lines (81 loc) • 2.44 kB
JavaScript
import path from "node:path";
import { nodeExternals } from "rollup-plugin-node-externals";
import { defineConfig } from "vite";
import dts from "vite-plugin-dts";
import tsconfigPaths from "vite-tsconfig-paths";
function createLibraryViteConfig(options) {
const rootDir = options.rootDir;
const packageJson = options.packageJson ?? path.join(rootDir, "package.json");
const srcDir = options.srcDir ?? path.join(rootDir, "src");
const entryFile = options.entryFile ?? path.join(srcDir, "index.ts");
const outDir = options.outDir ?? path.join(rootDir, "dist");
const publicDir = options.publicDir ?? path.join(rootDir, "public");
const include = Array.isArray(options.include) ? options.include : options.include ? [options.include] : ["src/**/*.{js,jsx,ts,tsx}", "src/**/*.d.ts", "dts/**/*.d.ts"];
const exclude = Array.isArray(options.exclude) ? options.exclude : options.exclude ? [options.exclude] : ["**/*.test.{js,jsx,ts,tsx}", "**/*.spec.{js,jsx,ts,tsx}"];
const libraryConfig = defineConfig({
root: rootDir,
publicDir,
build: {
target: "es2022",
outDir,
copyPublicDir: true,
minify: false,
emptyOutDir: false,
sourcemap: true,
lib: {
entry: {
index: entryFile
},
formats: ["cjs", "es"],
fileName: (format, entryName) => path.join(
format === "es" ? "esm" : "cjs",
[entryName, format === "es" ? "mjs" : "cjs"].join(".")
)
},
rollupOptions: {
output: {
preserveModules: true,
exports: "named",
hoistTransitiveImports: false,
assetFileNames: "assets/[name][extname]"
}
}
},
esbuild: {
jsx: "automatic"
},
plugins: [
{
...nodeExternals({
packagePath: packageJson,
builtins: true,
deps: true,
devDeps: true,
peerDeps: true
}),
enforce: "pre"
},
{
...tsconfigPaths({
root: rootDir
}),
enforce: "pre"
},
{
...dts({
root: rootDir,
outDir: path.join(outDir, "types"),
include: include.map((glob) => path.join(rootDir, glob)),
exclude
}),
enforce: "post",
apply: "build"
}
]
});
return libraryConfig;
}
export {
createLibraryViteConfig
};
//# sourceMappingURL=library-config.mjs.map