vite-plugin-cesium-next
Version:
Cesium library plugin for Vite
114 lines (113 loc) • 3.75 kB
JavaScript
// src/index.ts
import fs from "fs-extra";
import path from "path";
import externalGlobals from "rollup-plugin-external-globals";
import serveStatic from "serve-static";
import { normalizePath } from "vite";
function vitePluginCesium(options = {}) {
const {
viteBase = void 0,
rebuildCesium = false,
devMinifyCesium = false,
cesiumBuildRootPath = "node_modules/cesium/Build",
cesiumBuildPath = "node_modules/cesium/Build/Cesium/",
cesiumBaseUrl = "cesium/"
} = options;
const CESIUM_BASE_URL = cesiumBaseUrl.endsWith("/") ? cesiumBaseUrl : cesiumBaseUrl + "/";
const globalVars = {
outDir: "dist",
base: "/",
isBuild: false,
cesiumRelativeUrl: ""
};
return {
name: "vite-plugin-cesium-next",
config(c, { command }) {
var _a;
if (viteBase) {
globalVars.base = viteBase;
} else if (c.base) {
globalVars.base = c.base;
} else {
globalVars.base = "/";
}
globalVars.isBuild = command === "build";
if ((_a = c.build) == null ? void 0 : _a.outDir) {
globalVars.outDir = c.build.outDir;
}
globalVars.cesiumRelativeUrl = path.posix.join(globalVars.base, CESIUM_BASE_URL);
const userConfig = {};
if (!globalVars.isBuild) {
userConfig.define = {
CESIUM_BASE_URL: JSON.stringify(globalVars.cesiumRelativeUrl)
};
} else {
if (rebuildCesium) {
userConfig.build = {
assetsInlineLimit: 0,
chunkSizeWarningLimit: 5e3,
rollupOptions: {
output: {
intro: `window.CESIUM_BASE_URL = ${JSON.stringify(globalVars.cesiumRelativeUrl)};`
}
}
};
} else {
userConfig.build = {
rollupOptions: {
external: ["cesium"],
plugins: [externalGlobals({ cesium: "Cesium" })]
}
};
}
}
return userConfig;
},
configureServer({ middlewares }) {
const cesiumPath = path.join(cesiumBuildRootPath, devMinifyCesium ? "Cesium" : "CesiumUnminified");
middlewares.use(path.posix.join("/", globalVars.cesiumRelativeUrl), serveStatic(cesiumPath, {
setHeaders: (res, path2, stat) => {
res.setHeader("Access-Control-Allow-Origin", "*");
}
}));
},
async closeBundle() {
if (globalVars.isBuild) {
try {
await fs.copy(path.join(cesiumBuildPath, "Assets"), path.join(globalVars.outDir, CESIUM_BASE_URL, "Assets"));
await fs.copy(path.join(cesiumBuildPath, "ThirdParty"), path.join(globalVars.outDir, CESIUM_BASE_URL, "ThirdParty"));
await fs.copy(path.join(cesiumBuildPath, "Workers"), path.join(globalVars.outDir, CESIUM_BASE_URL, "Workers"));
await fs.copy(path.join(cesiumBuildPath, "Widgets"), path.join(globalVars.outDir, CESIUM_BASE_URL, "Widgets"));
if (!rebuildCesium) {
await fs.copy(path.join(cesiumBuildPath, "Cesium.js"), path.join(globalVars.outDir, CESIUM_BASE_URL, "Cesium.js"));
}
} catch (err) {
console.error("copy failed", err);
}
}
},
transformIndexHtml() {
const tags = [
{
tag: "link",
attrs: {
rel: "stylesheet",
href: normalizePath(path.join(globalVars.cesiumRelativeUrl, "Widgets/widgets.css"))
}
}
];
if (globalVars.isBuild && !rebuildCesium) {
tags.push({
tag: "script",
attrs: {
src: normalizePath(path.join(globalVars.cesiumRelativeUrl, "Cesium.js"))
}
});
}
return tags;
}
};
}
export {
vitePluginCesium as default
};