Deployment
This guide covers the production build commands, the build pipeline, and the release output layout.
Build commands
| Script | Command | Effect |
|---|---|---|
dev | pnpm --filter @compdfkit/webview dev | Vite dev server (--host 0.0.0.0 --port 3032). |
dev:core | pnpm --filter @compdfkit/core build:watch | Rollup watch + sourcemaps for core. |
build | pnpm --filter @compdfkit/webview build | vite build → packages/webview/dist/. |
build:core | pnpm --filter @compdfkit/core build:prod | Rollup prod → webview.min.js + PDFWorker.js into webview/lib/. |
build:webviewer | pnpm --filter @compdfkit/core build:webviewer | Rollup webviewer config → webviewer.js + webviewer.global.js into webview/lib/. |
build:release | node scripts/build-release.mjs | Runs build:core → build:webviewer → build, then assembles release/. |
Per-package scripts
@compdfkit/webview: dev, build (vite build), preview, test:unit (vitest run --environment happy-dom --root src/), lint.
@compdfkit/core: clear (rimraf lib), build (rollup -c), build:watch, build:prod (cross-env NODE_ENV=production rollup -c), build:webviewer.
Build pipeline
The full release pipeline (build:release) runs three builds in order, then assembles the release folder:
build:core → packages/webview/lib/webview.min.js, PDFWorker.js
build:webviewer → packages/webview/lib/webviewer.js, webviewer.global.js
build (webview) → packages/webview/dist/ (Vite)
scripts/build-release.mjs → release/How core lands in packages/webview/lib/
packages/core/rollup.config.js(two bundles):src/worker/compdfkit_worker.js→../webview/lib/PDFWorker.js(ES);src/index.js→../webview/lib/webview.min.js(ES). terser with a reserved-names list (WASM-binding symbols likeComPDFKitJS,Rectthat must not be mangled); Babel targets edge17/ff60/chrome67/safari10/ie10.packages/core/rollup.webviewer.config.js:webviewer.js→../webview/lib/webviewer.js(ES) +../webview/lib/webviewer.global.js(UMD, globalComPDFKitViewer).
Vite config
packages/webview/vite.config.js:
base: './'(relative assets — important for iframe/S3 hosting).- Plugins:
@vitejs/plugin-vue,unplugin-vue-components(auto-import),vite-svg-pluginfor./src/assets/icons/. - Alias
@→./src. - Dev server port 3000 in config (overridden to 3032 by the
devscript).
packages/webview/lib/ contents
Build outputs + prebuilt engine assets: webview.min.js (+ .map), PDFWorker.js (+ .map), webviewer.js, webviewer.global.js, plus ComPDFKit.js, ComPDFKit.wasm, pdf.worker.min.js, DroidSansFallbackFull.ttf, THSarabunNew.ttf, font.ff, CMYK/, and legacy ComPDFKit1/2.*, index.js/wasm, pdfium.js/wasm.
Release layout
scripts/build-release.mjs copies into:
release/
├── @compdfkit/
│ ├── webviewer.global.js # UMD embed entry (global ComPDFKitViewer)
│ └── webviewer.js # ES embed entry
└── webviewer/
├── index.html
├── favicon.ico
├── assets/ # Vite-built webview assets
├── locales/ # translation-*.json (6 languages)
├── images/
├── example/Quick Start Guide for ComPDFKit Web Demo.pdf
└── lib/
├── ComPDFKit.js
├── ComPDFKit.wasm
├── PDFWorker.js
├── DroidSansFallbackFull.ttf
├── pdf.worker.min.js
└── CMYK/Hosting
To deploy, serve the release/webviewer/ folder at a public URL and point the integrator's path option at it:
ComPDFKitViewer.init(
{ path: 'https://cdn.example.com/webviewer/', pdfUrl: '...', license: '...' },
document.getElementById('viewer')
);base: './'in the Vite config makes all asset paths relative, so the build works under any sub-path (iframe, S3, CDN).- The
locales/folder must be served alongside the assets (i18next-http-backend loads./locales/translation-<lng>.json). - The
lib/folder (engine + WASM) must be served with the correct MIME types;.wasmshould be served asapplication/wasm.
Testing & linting in CI
pnpm --filter @compdfkit/webview test:unit # Vitest + happy-dom
pnpm --filter @compdfkit/webview lint # ESLint (.vue/.js/.jsx/.cjs/.mjs)There is no monorepo-wide test runner. The core package has no test infrastructure beyond individual .test.js files run manually.
Related
- Getting Started — embedding.
- Architecture — the build outputs in context.