index.mjs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // src/index.ts
  2. import fs from "fs-extra";
  3. import path from "path";
  4. import externalGlobals from "rollup-plugin-external-globals";
  5. import serveStatic from "serve-static";
  6. import { normalizePath } from "vite";
  7. function vitePluginCesium(options = {}) {
  8. const {
  9. rebuildCesium = false,
  10. devMinifyCesium = false,
  11. cesiumBuildRootPath = "node_modules/cesium/Build",
  12. cesiumBuildPath = "node_modules/cesium/Build/Cesium/"
  13. } = options;
  14. let CESIUM_BASE_URL = "cesium/";
  15. let outDir = "dist";
  16. let base = "/";
  17. let isBuild = false;
  18. return {
  19. name: "vite-plugin-cesium",
  20. config(c, { command }) {
  21. var _a;
  22. isBuild = command === "build";
  23. if (c.base) {
  24. base = c.base;
  25. if (base === "")
  26. base = "./";
  27. }
  28. if ((_a = c.build) == null ? void 0 : _a.outDir) {
  29. outDir = c.build.outDir;
  30. }
  31. CESIUM_BASE_URL = path.posix.join(base, CESIUM_BASE_URL);
  32. const userConfig = {};
  33. if (!isBuild) {
  34. userConfig.define = {
  35. CESIUM_BASE_URL: JSON.stringify(CESIUM_BASE_URL)
  36. };
  37. } else {
  38. if (rebuildCesium) {
  39. userConfig.build = {
  40. assetsInlineLimit: 0,
  41. chunkSizeWarningLimit: 5e3,
  42. rollupOptions: {
  43. output: {
  44. intro: `window.CESIUM_BASE_URL = "${CESIUM_BASE_URL}";`
  45. }
  46. }
  47. };
  48. } else {
  49. userConfig.build = {
  50. rollupOptions: {
  51. external: ["cesium"],
  52. plugins: [externalGlobals({ cesium: "Cesium" })]
  53. }
  54. };
  55. }
  56. }
  57. return userConfig;
  58. },
  59. configureServer({ middlewares }) {
  60. const cesiumPath = path.join(cesiumBuildRootPath, devMinifyCesium ? "Cesium" : "CesiumUnminified");
  61. middlewares.use(path.posix.join("/", CESIUM_BASE_URL), serveStatic(cesiumPath));
  62. },
  63. async closeBundle() {
  64. if (isBuild) {
  65. try {
  66. await fs.copy(path.join(cesiumBuildPath, "Assets"), path.join(outDir, "cesium/Assets"));
  67. await fs.copy(path.join(cesiumBuildPath, "ThirdParty"), path.join(outDir, "cesium/ThirdParty"));
  68. await fs.copy(path.join(cesiumBuildPath, "Workers"), path.join(outDir, "cesium/Workers"));
  69. await fs.copy(path.join(cesiumBuildPath, "Widgets"), path.join(outDir, "cesium/Widgets"));
  70. if (!rebuildCesium) {
  71. await fs.copy(path.join(cesiumBuildPath, "Cesium.js"), path.join(outDir, "cesium/Cesium.js"));
  72. }
  73. } catch (err) {
  74. console.error("copy failed", err);
  75. }
  76. }
  77. },
  78. transformIndexHtml() {
  79. const tags = [
  80. {
  81. tag: "link",
  82. attrs: {
  83. rel: "stylesheet",
  84. href: normalizePath(path.join(CESIUM_BASE_URL, "Widgets/widgets.css"))
  85. }
  86. }
  87. ];
  88. if (isBuild && !rebuildCesium) {
  89. tags.push({
  90. tag: "script",
  91. attrs: {
  92. src: normalizePath(path.join(CESIUM_BASE_URL, "Cesium.js"))
  93. }
  94. });
  95. }
  96. return tags;
  97. }
  98. };
  99. }
  100. export {
  101. vitePluginCesium as default
  102. };