Vue整合新版本Cesium(1.63+)
Cesium在1.63进行了一次重大重构,项目从AMD模块转向原生JS ES6模块,具体可以查看官方博客CesiumJS Migrates to ES6 Modules ,所以以前老的Vue整合Cesium的方式都没法用了,这里是新版本整合方式。
一、首先还是安装必要依赖,和普通vue项目一样添加上Cesium最新版本。注意devDependencies中和老版本一样要增加一个copy-webpack-plugin用于拷贝Cesium的一些静态资源。
{
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"cesium": "^1.84.0",
"core-js": "^3.6.5",
"vue": "^2.6.11",
"vue-router": "^3.2.0",
"vuex": "^3.4.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-plugin-router": "~4.5.0",
"@vue/cli-plugin-vuex": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"@vue/eslint-config-standard": "^5.1.2",
"babel-eslint": "^10.1.0",
"copy-webpack-plugin": "^6.0.3",
"eslint": "^6.7.2",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.2.2",
"sass": "^1.26.5",
"sass-loader": "^8.0.2",
"vue-template-compiler": "^2.6.11"
}
}
二、配置vue.config.js,增加Cesium打包的一些配置,如拷贝静态资源、定义CESIUM_BASE_URL打包常量等。
const webpack = require('webpack')
const CopyWebpackPlugin = require('copy-webpack-plugin')
module.exports = {
publicPath: '/demo',
productionSourceMap: false,
configureWebpack: {
plugins: [
// Copy Cesium Assets, Widgets, and Workers to a static directory
new CopyWebpackPlugin({
patterns: [
{ from: 'node_modules/cesium/Build/Cesium/Workers', to: 'Workers' },
{ from: 'node_modules/cesium/Build/Cesium/ThirdParty', to: 'ThirdParty' },
{ from: 'node_modules/cesium/Build/Cesium/Assets', to: 'Assets' },
{ from: 'node_modules/cesium/Build/Cesium/Widgets', to: 'Widgets' }
]
}),
new webpack.DefinePlugin({
// Define relative base path in cesium for loading assets
CESIUM_BASE_URL: JSON.stringify('')
})
],
module: {
// 解决Cesium 构建warning Critical dependency: require function is used in a way in which dependencies cannot be statically extracted
unknownContextCritical: false,
unknownContextRegExp: /\/node_modules\/cesium\/Source\/Core\/buildModuleUrl\.js/
}
}
}
三、main.js全局引入Cesium Widgets 样式。
import 'cesium/Build/Cesium/Widgets/widgets.css'
四、修改以前Cesium引入方式。
// 修改以前Cesium引入方式:import Cesium from 'cesium/Cesium' 为
import * as Cesium from 'cesium'
// 现在你也可以单独引入Cesium的某个类
import { Billboard } from 'cesium'
伍、Demo。
<template>
<div id="map"></div>
</template>
<script>
import * as Cesium from 'cesium'
export default {
name: 'About',
data () {
return {
$_viewer: null
}
},
mounted () {
this.$_viewer = new Cesium.Viewer('map')
}
}
</script>
<style lang="scss" scoped>
#map{
width: 100%;
height: 100%;
}
</style>
