81 lines
2.1 KiB
JavaScript
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];
|
|
},
|
|
),
|
|
);
|
|
}
|