首先我们先创建个vue3+ts项目
vue create cesium_dome
然后引入cesium
npm i cesium --save
在vue.config.js配置(没有就自己在项目根目录创建一个)
const CopyWebpackPlugin = require("copy-webpack-plugin"); const webpack = require("webpack"); const path = require("path"); let cesiumSource = "./node_modules/cesium/Source"; let cesiumWorkers = "Workers"; module.exports = { configureWebpack: { resolve: { alias: { "@": path.resolve("src"), }, }, plugins: [ new CopyWebpackPlugin([{ from: path.join(cesiumSource, cesiumWorkers), to: "Workers" }, ]), new CopyWebpackPlugin([{ from: path.join(cesiumSource, "Assets"), to: "Assets" }, ]), new CopyWebpackPlugin([{ from: path.join(cesiumSource, "Widgets"), to: "Widgets" }, ]), new CopyWebpackPlugin([{ from: path.join(cesiumSource, "ThirdParty/Workers"), to: "ThirdParty/Workers", }, ]), new webpack.DefinePlugin({ CESIUM_BASE_URL: JSON.stringify("./"), }), ], module: { unknownContextCritical: false, unknownContextRegExp: /\/cesium\/cesium\/Source\/Core\/buildModuleUrl\.js/, }, }, };
创建个index.vue
<template> <div class="home" id="cesiumContainer"> </div> </template> <script lang="ts"> import { defineComponent, onMounted } from 'vue'; import { Viewer, } from "cesium"; import "cesium/Build/Cesium/Widgets/widgets.css"; export default defineComponent({ name: 'Home', setup(){ onMounted(()=>{ new Viewer('cesiumContainer'); }) } }); </script> <style scoped> .home{ width: 100%; height: 500px; } </style>
启动会出现以下问题
由于在 ./node_modules/cesium/Source/ThirdParty/zip.js 文件中使用了 import.meta 语法,webpack 默认不支持,在进行项目构建时,会报如下错误,提示信息需要添加 loader。
接下来我们安装 loader
npm install @open-wc/webpack-import-meta-loader --save-dev
然后在vue.config.js中添加(在module中[…]后面)
rules: [ { test: /\.js$/, use: { loader: '@open-wc/webpack-import-meta-loader', }, }, ]
然后重启