Skip to main content

Vite Configuration in a Multi-tenant System

How to use Vite to support many brand templates in one repository with dynamic build routing and environment isolation.


1. Dynamic route template selection by SITE_KEY

At build time, resolve the matching tenant route file and generate the active router entry.

function writeBuildRouter(siteKey: string) {
const sourceFile = path.resolve(__dirname, `../../template/${siteKey}/router/routes.ts`);
const destinationFile = path.resolve(__dirname, '../../src/router/build.ts');

const data = fs.readFileSync(sourceFile, 'utf8');
fs.writeFileSync(destinationFile, data, 'utf8');
}

Benefits:

  • One repo for many tenant templates
  • Lower code duplication
  • Build output tailored to one tenant at a time

2. Environment variable strategy

Use explicit environment files and runtime validation.

  • .env.development
  • .env.staging
  • .env.production

Expose only necessary client-safe vars with prefix policy.

3. Development proxy configuration

Use Vite proxy for API domains in local development to avoid CORS friction.

4. i18n and plugin integration

Integrate Vue i18n and related plugins in a centralized Vite plugin pipeline to keep environment behavior consistent.

5. Browser target configuration

target: {
browser: ['es2019', 'edge88', 'firefox78', 'chrome87', 'safari13.1'],
node: 'node16',
}

This balances modern syntax and practical compatibility.

Interview-ready summary

In multi-tenant systems, I use SITE_KEY-driven build composition, strict env isolation, and explicit browser target policy so each tenant build stays predictable and maintainable.