skillbox/client/vite.config.ts

108 lines
2.9 KiB
TypeScript

import { defineConfig } from "vite";
import { sentryVitePlugin } from "@sentry/vite-plugin";
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"
);
},
};
};
const disableSentryPlugin = !process.env.SENTRY_AUTH_TOKEN; // disable the plugin when we're not in an environment that is connected to sentry
// https://vitejs.dev/config/
export default defineConfig({
build: {
assetsDir: "static",
sourcemap: true, // Source map generation must be turned on
},
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"),
},
},
server: {
port: 8080,
hmr: {
clientPort: 8080,
},
},
plugins: [
gql(),
vue(),
htmlPlugin(),
sentryVitePlugin({
authToken: process.env.SENTRY_AUTH_TOKEN,
org: "iterativ",
disable: disableSentryPlugin,
project: "skillbox-vue",
}),
],
define,
});