Files
pdfme/packages/cli/vite.config.mts
2026-03-23 17:03:27 +09:00

53 lines
1.5 KiB
TypeScript

import { readFileSync } from 'node:fs';
import { builtinModules } from 'node:module';
import { dirname, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
import { defineConfig } from 'vite';
const __dirname = dirname(fileURLToPath(import.meta.url));
const packageJson = JSON.parse(readFileSync(resolve(__dirname, 'package.json'), 'utf8')) as {
version?: string;
dependencies?: Record<string, string>;
peerDependencies?: Record<string, string>;
};
const builtinModuleSet = new Set([
...builtinModules,
...builtinModules.map((moduleName) => `node:${moduleName}`),
]);
const packageDependencies = [
...Object.keys(packageJson.dependencies ?? {}),
...Object.keys(packageJson.peerDependencies ?? {}),
];
// Also externalize transitive native deps that must not be bundled
const alwaysExternal = ['@napi-rs/canvas', 'pdfjs-dist', 'fontkit', '@pdfme/pdf-lib'];
const isExternal = (id: string) =>
builtinModuleSet.has(id) ||
packageDependencies.some((dependency) => id === dependency || id.startsWith(`${dependency}/`)) ||
alwaysExternal.some((dep) => id === dep || id.startsWith(`${dep}/`));
export default defineConfig({
define: {
__CLI_VERSION__: JSON.stringify(packageJson.version ?? '0.0.0'),
},
build: {
lib: {
entry: resolve(__dirname, 'src/index.ts'),
fileName: 'index',
formats: ['es'],
},
minify: false,
outDir: 'dist',
rollupOptions: {
external: isExternal,
output: {
banner: '#!/usr/bin/env node',
},
},
sourcemap: true,
target: 'node20',
},
});