mirror of
https://github.com/Dvorinka/excalidraw-full.git
synced 2026-06-05 06:32:56 +00:00
999465cc50
Introduced the DISABLE_VITE_CHECKER environment variable to conditionally disable the vite checker plugin in the build process. Updated the Dockerfile to set this variable during the Docker build, allowing builds to bypass vite checker when needed.
207 lines
5.8 KiB
TypeScript
207 lines
5.8 KiB
TypeScript
import { defineConfig, loadEnv } from "vite";
|
|
import react from "@vitejs/plugin-react";
|
|
import svgrPlugin from "vite-plugin-svgr";
|
|
import { ViteEjsPlugin } from "vite-plugin-ejs";
|
|
import { VitePWA } from "vite-plugin-pwa";
|
|
import checker from "vite-plugin-checker";
|
|
|
|
// To load .env.local variables
|
|
const envVars = loadEnv("", `../`);
|
|
// https://vitejs.dev/config/
|
|
export default defineConfig({
|
|
server: {
|
|
port: Number(envVars.VITE_APP_PORT || 3000),
|
|
// open the browser
|
|
open: true,
|
|
proxy: {
|
|
"/api": {
|
|
target: "http://localhost:3002",
|
|
changeOrigin: true,
|
|
},
|
|
"/auth": {
|
|
target: "http://localhost:3002",
|
|
changeOrigin: true,
|
|
},
|
|
},
|
|
},
|
|
// We need to specify the envDir since now there are no
|
|
//more located in parallel with the vite.config.ts file but in parent dir
|
|
envDir: "../",
|
|
build: {
|
|
outDir: "build",
|
|
rollupOptions: {
|
|
output: {
|
|
// Creating separate chunk for locales except for en and percentages.json so they
|
|
// can be cached at runtime and not merged with
|
|
// app precache. en.json and percentages.json are needed for first load
|
|
// or fallback hence not clubbing with locales so first load followed by offline mode works fine. This is how CRA used to work too.
|
|
manualChunks(id) {
|
|
if (
|
|
id.includes("packages/excalidraw/locales") &&
|
|
id.match(/en.json|percentages.json/) === null
|
|
) {
|
|
const index = id.indexOf("locales/");
|
|
// Taking the substring after "locales/"
|
|
return `locales/${id.substring(index + 8)}`;
|
|
}
|
|
},
|
|
},
|
|
},
|
|
sourcemap: true,
|
|
},
|
|
plugins: [
|
|
react(),
|
|
process.env.DISABLE_VITE_CHECKER
|
|
? undefined
|
|
: checker({
|
|
typescript: true,
|
|
eslint:
|
|
envVars.VITE_APP_ENABLE_ESLINT === "false"
|
|
? undefined
|
|
: { lintCommand: 'eslint "./**/*.{js,ts,tsx}"' },
|
|
overlay: {
|
|
initialIsOpen: envVars.VITE_APP_COLLAPSE_OVERLAY === "false",
|
|
badgeStyle: "margin-bottom: 4rem; margin-left: 1rem",
|
|
},
|
|
}),
|
|
svgrPlugin(),
|
|
ViteEjsPlugin(),
|
|
VitePWA({
|
|
registerType: "autoUpdate",
|
|
devOptions: {
|
|
/* set this flag to true to enable in Development mode */
|
|
enabled: false,
|
|
},
|
|
|
|
workbox: {
|
|
// Don't push fonts and locales to app precache
|
|
globIgnores: ["fonts.css", "**/locales/**", "service-worker.js"],
|
|
runtimeCaching: [
|
|
{
|
|
urlPattern: new RegExp("/.+.(ttf|woff2|otf)"),
|
|
handler: "CacheFirst",
|
|
options: {
|
|
cacheName: "fonts",
|
|
expiration: {
|
|
maxEntries: 50,
|
|
maxAgeSeconds: 60 * 60 * 24 * 90, // <== 90 days
|
|
},
|
|
},
|
|
},
|
|
{
|
|
urlPattern: new RegExp("fonts.css"),
|
|
handler: "StaleWhileRevalidate",
|
|
options: {
|
|
cacheName: "fonts",
|
|
expiration: {
|
|
maxEntries: 50,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
urlPattern: new RegExp("locales/[^/]+.js"),
|
|
handler: "CacheFirst",
|
|
options: {
|
|
cacheName: "locales",
|
|
expiration: {
|
|
maxEntries: 50,
|
|
maxAgeSeconds: 60 * 60 * 24 * 30, // <== 30 days
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
manifest: {
|
|
short_name: "Excalidraw",
|
|
name: "Excalidraw",
|
|
description:
|
|
"Excalidraw is a whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them.",
|
|
icons: [
|
|
{
|
|
src: "android-chrome-192x192.png",
|
|
sizes: "192x192",
|
|
type: "image/png",
|
|
},
|
|
{
|
|
src: "apple-touch-icon.png",
|
|
type: "image/png",
|
|
sizes: "180x180",
|
|
},
|
|
{
|
|
src: "favicon-32x32.png",
|
|
sizes: "32x32",
|
|
type: "image/png",
|
|
},
|
|
{
|
|
src: "favicon-16x16.png",
|
|
sizes: "16x16",
|
|
type: "image/png",
|
|
},
|
|
],
|
|
start_url: "/",
|
|
display: "standalone",
|
|
theme_color: "#121212",
|
|
background_color: "#ffffff",
|
|
file_handlers: [
|
|
{
|
|
action: "/",
|
|
accept: {
|
|
"application/vnd.excalidraw+json": [".excalidraw"],
|
|
},
|
|
},
|
|
],
|
|
share_target: {
|
|
action: "/web-share-target",
|
|
method: "POST",
|
|
enctype: "multipart/form-data",
|
|
params: {
|
|
files: [
|
|
{
|
|
name: "file",
|
|
accept: [
|
|
"application/vnd.excalidraw+json",
|
|
"application/json",
|
|
".excalidraw",
|
|
],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
screenshots: [
|
|
{
|
|
src: "/screenshots/virtual-whiteboard.png",
|
|
type: "image/png",
|
|
sizes: "462x945",
|
|
},
|
|
{
|
|
src: "/screenshots/wireframe.png",
|
|
type: "image/png",
|
|
sizes: "462x945",
|
|
},
|
|
{
|
|
src: "/screenshots/illustration.png",
|
|
type: "image/png",
|
|
sizes: "462x945",
|
|
},
|
|
{
|
|
src: "/screenshots/shapes.png",
|
|
type: "image/png",
|
|
sizes: "462x945",
|
|
},
|
|
{
|
|
src: "/screenshots/collaboration.png",
|
|
type: "image/png",
|
|
sizes: "462x945",
|
|
},
|
|
{
|
|
src: "/screenshots/export.png",
|
|
type: "image/png",
|
|
sizes: "462x945",
|
|
},
|
|
],
|
|
},
|
|
}),
|
|
],
|
|
publicDir: "../public",
|
|
});
|