cesium+vue3+TS+vite

135 阅读1分钟

cesium+vue3+TS+vite

在vue3+TS中也可以按照vue2的方法,直接在public中手动复制cesium中的文件在index.html中进行引入

下面介绍的是在vue3中利用vite的拷贝插件来进行引入cesium

1.npm下载对应的cesium版本和ts包

npm install cesium @types/cesium --save-dev

2.安装拷贝插件

npm install rollup-plugin-copy -D

3.配置vite中的拷贝文件的方法

export default defineConfig({
  plugins: [
	//.....
    copy({
      targets: [
        {
          src: 'node_modules/cesium/Build/Cesium/Assets/**/*',
          dest: 'public/libs/cesium/Assets'
        },
        {
          src: 'node_modules/cesium/Build/Cesium/Widgets/**/*',
          dest: 'public/libs/cesium/Widgets'
        },
        {
          src: 'node_modules/cesium/Build/Cesium/Workers/**/*',
          dest: 'public/libs/cesium/Workers'
        }
      ],
      hook: 'buildStart' // 在构建开始时执行复制
    })
  ],
  build: {
    assetsDir: 'static', // 自定义资源目录[5](@ref)
    rollupOptions: {
      output: {
        assetFileNames: 'static/[name]-[hash][extname]' // 资源命名规则[5](@ref)
      }
    }
  }
})

4.在ts.json的全局配置里配置

declare module "cesium" {
  export * from "cesium/Source/Cesium";
};
declare global {
  interface window {
    CESIUM_BASE_URL: string;
  }
}

5.组件封装

<script setup lang="ts">
import {
  onBeforeUnmount,
  onMounted,
  reactive,
  ref,
} from 'vue';

import { Viewer } from 'cesium';

const viewerRef = ref();
let viewer: Viewer | null = null;

onMounted(() => {
  // 动态设置开发/生产环境路径
  window.CESIUM_BASE_URL = import.meta.env.DEV
    ? '/node_modules/cesium/Build/Cesium/'
    : '/libs/cesium/';

  viewer = new Viewer(viewerRef.value!, {
    infoBox: false,   // 禁用沙箱模式避免控制台报错[2,6](@ref)
    timeline: false,
    animation: false
  });
});

onBeforeUnmount(() => {
  viewer?.destroy()  // 防止内存泄漏[5](@ref)
});
</script>
<template>

  <div ref="viewerRef" class="cesium-container"></div>


</template>
<style  lang='scss'>
@import "/node_modules/cesium/Build/Cesium/Widgets/widgets.css";

</style>