最近被問到如何在 vuejs 中集成 cesium,首先想到的官網應該有教程。官網有專門講 Cesium and Webpack(有坑),按照官網的說明,動手建了一個Demo,在這記錄下踩坑過程。javascript
環境以下: node: v10.13.0 npm: 6.4.1 vue-cli: 2.9.6css
1、vue 工程建立,使用 vue-clihtml
vue init webpack cesium-demo
複製代碼
2、cesium 安裝vue
npm install cesium --save
複製代碼
3、webpack 配置java
一、build/webpack.base.conf.js 文件中添加 Cesium module namenode
resolve: {
alias: {
// Cesium module name
cesium: path.resolve(__dirname, '../node_modules/cesium/Source')
}
}
複製代碼
二、build/webpack.dev.conf.js 文件中添加 static files 管理webpack
plugins: [
...
// Copy Cesium Assets, Widgets, and Workers to a static directory
new CopyWebpackPlugin([ { from: path.join('node_modules/cesium/Source', '../Build/Cesium/Workers'), to: 'Workers' } ]),
new CopyWebpackPlugin([ { from: path.join('node_modules/cesium/Source', 'Assets'), to: 'Assets' } ]),
new CopyWebpackPlugin([ { from: path.join('node_modules/cesium/Source', 'Widgets'), to: 'Widgets' } ]),
new webpack.DefinePlugin({
// Define relative base path in cesium for loading assets
CESIUM_BASE_URL: JSON.stringify('')
})
],
複製代碼
4、Hello World!git
App.vue 中輸入如下代碼github
<template>
<div id="app">
<div id="cesiumContainer"></div>
</div>
</template>
<script>
import Cesium from 'cesium/Cesium'
import 'cesium/Widgets/widgets.css'
export default {
name: 'App',
mounted () {
this.$nextTick(() => {
const viewer = new Cesium.Viewer('cesiumContainer')
console.log('viewer: ', viewer)
})
}
}
</script>
<style>
html,
body {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
}
#app,#cesiumContainer {
font-family: "Avenir", Helvetica, Arial, sans-serif;
width: 100%;
height: 100%;
overflow: hidden;
}
</style>
複製代碼
5、運行web
npm run dev
複製代碼
根據官網的說明,瀏覽器運行結果以下
最後在 github 上找到這個問題的解決方法, 在 build/webpack.base.conf.js 文件中添加以下二行
module: {
unknownContextCritical: false,
unknownContextRegExp: /^.\/.*$/,
...
}
複製代碼
從新運行
Cesium.Ion.defaultAccessToken = ‘your_access_token’
複製代碼
放一張最終效果圖