mirror of
				https://github.com/excalidraw/excalidraw.git
				synced 2025-11-04 12:54:23 +01:00 
			
		
		
		
	* feat: decouple package deps and introduce yarn workspaces * update root directory * fix * fix scripts * fix lint * update path in scripts * remove yarn.lock files from packages * ignore workspace * dummy * dummy * remove comment check * revert workflow changes * ignore ws when installing gh actions * remove log * update path * fix * fix typo
		
			
				
	
	
		
			195 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			5.5 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,
 | 
						|
  },
 | 
						|
  // 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(),
 | 
						|
    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",
 | 
						|
});
 |