vue集成cesium常见的方式是通过webpack配置,但是也可以通过在html页面添加script标签的方式集成(个人觉得通过添加script标签的方式集成会好一些,因为cesium库比较复杂,如果通过webpack集成的方式在编译的时候相对会慢一些,影响开发体验),另外一种方式和添加script标签的方式比较类似,就是直接在main.js或者vue文件中Import cesium.js和widget.css,但是这种方式只导入了js文件和css文件还不能使用,因为cesium还有静态资源文件,所以还要通过Cesium类的buildModuleUrl API导入静态资源文件,静态资源可以直接拷贝过来放在static文件中,下面一一介绍下这三种集成方式。
第一种:
通过webpack集成cesium。
1,在webpack.base.conf 文件中添加
const cesiumSource = '../node_modules/cesium/Source' //导入cesium源码
2,output 对象下添加 sourcePrefix: ' '
3,module 对象下添加 unknownContextCritical: false
4,添加 amd: { toUrlUndefined: true }
5,node 对象下添加 fs: 'empty'
6,webpack.dev.conf 文件中添加以下代码
const cesiumSource = 'node_modules/cesium/Source'
const cesiumWorkers = '../Build/Cesium/Workers'
plugin 对象中添加以下代码(这个插件用于复制cesium的静态资源)
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 webpack.DefinePlugin({
// Define relative base path in cesium for loading assets
CESIUM_BASE_URL: JSON.stringify('')
})
7,webpack.prod.conf 文件中添加以下代码
const cesiumSource = 'node_modules/cesium/Source'
const cesiumWorkers = '../Build/Cesium/Workers'
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 webpack.DefinePlugin({
// Define relative base path in cesium for loading assets
CESIUM_BASE_URL: JSON.stringify('./')
})
到此,大功告成,npm run dev 启动即可。
第二种:
这种方式相对简单很多,不用在webpack里面配置,直接引入cesium.js 和 widget.css文件即可。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>my-project</title>
<link rel="stylesheet" href="static/Cesium/Widgets/widgets.css">
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
<script src="static/Cesium/Cesium.js"></script>
</body>
</html>
注意:cesium.js文件一定要和静态资源放到一个文件中,如果没放到一个文件夹中会报错找不到静态资源,出现这种情况那就要自己配置静态资源的地址,通过 buildModuleUrl 这个API,上文已提到过,我一般是直接复制node_modules\cesium\Build\Cesium
这个文件夹的所有文件到项目的static文件中。
个人推荐这种方式,不经过webpack,编译快,引入也简单。
第三种:
这种方式是直接在main.js或者vue文件中import即可
import Cesium from 'cesium/Cesium'
import 'cesium/Widgets/widgets.css'
但是这样直接引入会提示找不到静态资源,所以还得通过 buildModuleUrl API 加载cesium的静态资源,添加以下代码即可:
import buildModuleUrl from "cesium/Source/Core/buildModuleUrl"
buildModuleUrl.setBaseUrl('../static/Cesium/')
至此,大功告成,启动即可。
最后,有个问题说下,有次开发中通过直接添加 script 标签的方式引入cesium,在渲染label以及瓦片底图的时候,感觉label和底图的颜色明显不对,比正常的颜色明显暗了很多,字体也模糊了很多,后来才发现,cesium.js和widget.css这两个文件一定要是同一个版本编译的(但是也不确定是不是和静态资源有关系)。
因为当时手误引入了1.60版本的widget.css和1.61版本的cesium.js,所以导致底图颜色变暗以及label标签渲染模糊。