chatwoot/vite.lib.config.ts
Shivam Mishra 170b64d1f1
chore: upgrade to vite 6 (#14363)
Upgrades the frontend toolchain to Vite 6 and tidies up the build config
along the way. Behavior is unchanged for end users; this is dev/build
infra.

## What changed
- `vite` 5.4 → 6.4, `@vitejs/plugin-vue` → 5.2, `vite-plugin-ruby` → 5.2
(with matching `vite_rails`/`vite_ruby` gem bumps).
- Dropped the `vite-node` 2.0.1 pnpm override — no longer needed now
that vitest 3 runs on Vite 6 directly.
- Split the single `vite.config.ts` into:
- `vite.config.ts` (app), `vite.lib.config.ts` (SDK), `vite.shared.ts`
(aliases / Vue options), `vitest.config.ts` (tests).
- `pnpm build:sdk` now selects the SDK config explicitly instead of
branching on `BUILD_MODE=library`. SDK output path is unchanged
(`public/packs/js/sdk.js`).

No changes needed to Docker images, deployment scripts, or CI — Node 24
and pnpm 10 are already past Vite 6's floor, and the rake
`assets:precompile` hook still drives the SDK build via `pnpm`.

## How to test
- `pnpm dev` and verify the dashboard, widget, and survey routes load
and HMR works.
- Load a Chatwoot site widget on a test page and confirm `sdk.js` is
served and the widget mounts.
- `RAILS_ENV=production bundle exec rake assets:precompile` and confirm
`public/packs/js/sdk.js` plus the rest of the manifest are produced.
- `pnpm test` for the JS suite.

---------

Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Co-authored-by: Sony Mathew <2040199+sony-mathew@users.noreply.github.com>
2026-06-02 17:01:37 +05:30

34 lines
952 B
TypeScript

/*
* SDK library build.
*
* vite-plugin-ruby pulls every entrypoint as input, but the SDK needs to ship
* as a single IIFE file (`inlineDynamicImports: true`), which is incompatible
* with multiple entrypoints. So the SDK gets its own pipeline:
*
* vite build --config vite.lib.config.ts → public/packs/js/sdk.js
*
* The `assets:precompile` rake task runs this alongside the main app build.
*/
import { defineConfig } from 'vite';
import path from 'path';
import { aliases } from './vite.shared';
export default defineConfig({
build: {
rollupOptions: {
output: {
dir: 'public/packs',
entryFileNames: chunkInfo =>
chunkInfo.name === 'sdk' ? 'js/sdk.js' : '[name].js',
inlineDynamicImports: true,
},
},
lib: {
entry: path.resolve(__dirname, './app/javascript/entrypoints/sdk.js'),
formats: ['iife'],
name: 'sdk',
},
},
resolve: { alias: aliases },
});