UNPKG

vite-plugin-cesium-next

Version:
114 lines (113 loc) 3.75 kB
// 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 };