Files
test-repo/website/vite.config.mjs
T

81 lines
2.1 KiB
JavaScript

import vitePluginVue from "@vitejs/plugin-vue";
import vitePluginVueJsx from "@vitejs/plugin-vue-jsx";
import { visualizer as rollupPluginVisualizer } from "rollup-plugin-visualizer";
import { defineConfig } from "vite";
import { getPackageDependencies } from "./scripts/collect-dependencies.mjs";
const IS_PRODUCTION = process.env.NODE_ENV === "production";
const IS_CI = Boolean(process.env.CI);
const OUT_DIRECTORY = "./static/playground/";
const cdnDependencies = {
file: new URL("./package.json", import.meta.url),
exclude: new Set(["@docusaurus/preset-classic"]),
overrideDependencies: new Map([
// We don't need deps from `vue`
["vue", []],
]),
ignoreDependencies: (name) => name.startsWith("@types/"),
};
// Local develop requires `vue` for HMR
if (!IS_PRODUCTION) {
cdnDependencies.exclude.add("vue");
}
const alias = buildCdnAlias();
export default defineConfig({
base: IS_PRODUCTION ? "/playground/" : undefined,
publicDir: IS_PRODUCTION ? undefined : "./static/",
plugins: [
vitePluginVue(),
vitePluginVueJsx(),
IS_CI || !IS_PRODUCTION
? undefined
: rollupPluginVisualizer({
filename: `${OUT_DIRECTORY}bundle-report.html`,
}),
].filter(Boolean),
resolve: {
alias,
},
build: {
outDir: OUT_DIRECTORY,
minify: IS_CI,
},
define: {
"import.meta.env.VITE_IS_PR": JSON.stringify(
process.env.PULL_REQUEST === "true",
),
},
});
function buildCdnAlias() {
if (!IS_PRODUCTION) {
return;
}
return Object.fromEntries(
getPackageDependencies(cdnDependencies).map(
({ name, packageJson, dependencies }) => {
const url = new URL(
`https://esm.sh/${packageJson.name}@${packageJson.version}`,
);
const { searchParams } = url;
// searchParams.set("conditions", ["browser"]);
if (dependencies.length > 0) {
searchParams.set(
"deps",
dependencies
.map(({ name, version }) => `${name}@${version}`)
.join(","),
);
}
return [name, url.href];
},
),
);
}