skillbox/client/vite.config.ts

90 lines
2.5 KiB
TypeScript

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import gql from '@rollup/plugin-graphql';
import path from 'path';
const getFlavorConfig = () => {
switch (process.env.APP_FLAVOR) {
case 'my-kv':
return require('./config/prod-my-kv.env.js').default;
case 'my-dhf':
return require('./config/prod-dhf.env.js').default;
case 'my-dha':
return require('./config/prod-dha.env.js').default;
}
return {};
};
function resolve(dir: string) {
return path.join(__dirname, dir);
}
const define = {
'import.meta.env.HEP_URL': JSON.stringify(process.env.HEP_URL),
'import.meta.env.MATOMO_HOST': JSON.stringify(process.env.MATOMO_HOST),
'import.meta.env.MATOMO_SITE_ID': JSON.stringify(process.env.MATOMO_SITE_ID),
'import.meta.env.LOGOUT_REDIRECT_URL': JSON.stringify(process.env.LOGOUT_REDIRECT_URL),
'import.meta.env.VUE_APP_FLAVOR': JSON.stringify(process.env.APP_FLAVOR),
'import.meta.env.SENTRY_DSN': JSON.stringify(process.env.SENTRY_JAVASCRIPT_DSN),
'import.meta.env.SENTRY_ENVIRONMENT': JSON.stringify(process.env.SENTRY_ENV),
/*
* ENV variables used in JS code need to be stringyfied, as they will be replaced (in place) in the code,
* and JS needs quotes around strings
* see https://cli.vuejs.org/guide/mode-and-env.html#using-env-variables-in-client-side-code
*/
'import.meta.env.VUE_APP_ENABLE_SPELLCHECK': !!process.env.TASKBASE_BASEURL,
};
const flavorConfig = getFlavorConfig();
const htmlPlugin = () => {
return {
name: 'html-transform',
transformIndexHtml(html: string) {
return html
.replace(/_APP_TITLE_/, flavorConfig.VUE_APP_TITLE || 'mySkillbox')
.replace(/_FAVICON_16_/, flavorConfig.VUE_APP_FAVICON_16 || '/static/favicon-16x16.png')
.replace(/_FAVICON_32_/, flavorConfig.VUE_APP_FAVICON_32 || '/static/favicon-32x32.png');
},
};
};
// https://vitejs.dev/config/
export default defineConfig({
build: {
assetsDir: 'static',
},
css: {
preprocessorOptions: {
scss: {
additionalData: process.env.THEME ? `@import "styles/themes/_${process.env.THEME}.scss";` : '',
},
},
devSourcemap: true,
},
resolve: {
alias: {
'@': resolve('./src'),
styles: resolve('./src/styles'),
gql: resolve('./src/graphql/gql'),
vue: '@vue/compat'
},
},
server: {
port: 8080,
hmr: {
clientPort: 8080,
},
},
plugins: [gql(), vue({
template: {
compilerOptions: {
compatConfig: {
MODE: 3
}
}
}
}), htmlPlugin()],
define,
});