vueCli引入Cesium

  • 安装cesium
cnpm install cesium --save
  • vue.config.js中配置configureWebpack
const webpack = require("webpack");
const CopyWebpackPlugin = require('copy-webpack-plugin')
const cesiumSource = 'node_modules/cesium/Build/Cesium'

module.exports = {
     
	...//其他的配置

	  configureWebpack: (config) => {
     
    let plugins = []
    if (process.env.NODE_ENV === 'production') {
     
      plugins = [
        new webpack.DefinePlugin({
     
          CESIUM_BASE_URL: JSON.stringify('static')
        }),
        new CopyWebpackPlugin([{
      from: path.join(cesiumSource, 'Workers'), to: 'static/Workers' }]),
        new CopyWebpackPlugin([{
      from: path.join(cesiumSource, 'Assets'), to: 'static/Assets' }]),
        new CopyWebpackPlugin([{
      from: path.join(cesiumSource, 'ThirdParty'), to: 'static/ThirdParty' }]),
        new CopyWebpackPlugin([{
      from: path.join(cesiumSource, 'Widgets'), to: 'static/Widgets' }])
      ]
    } else {
     
      plugins = [
        new webpack.DefinePlugin({
     
          CESIUM_BASE_URL: JSON.stringify('')
        }),
        new CopyWebpackPlugin([{
      from: path.join(cesiumSource, 'Workers'), to: 'Workers' }]),
        new CopyWebpackPlugin([{
      from: path.join(cesiumSource, 'Assets'), to: 'Assets' }]),
        new CopyWebpackPlugin([{
      from: path.join(cesiumSource, 'ThirdParty'), to: 'ThirdParty' }]),
        new CopyWebpackPlugin([{
      from: path.join(cesiumSource, 'Widgets'), to: 'Widgets' }])
      ]
    }
    return {
     
      module: {
     
        unknownContextCritical: false,
        rules: [
          {
     
            test: /\.js$/,
            enforce: 'pre',
            include: path.resolve(__dirname, 'node_modules/cesium/Source'),
            sideEffects: false,
            use: [
              {
     
                loader: 'strip-pragma-loader',
                options: {
     
                  pragmas: {
     
                    debug: false
                  }
                }
              }
            ]
          }
        ]
      },
      optimization: {
     
        usedExports: true,
        splitChunks: {
     
          maxInitialRequests: Infinity,
          minSize: 0,
          maxSize: 250000,
          cacheGroups: {
     
            vendor: {
     
              test: /[\\/]node_modules[\\/]/,
              priority: -10,
              chunks: 'all',
              name(module) {
     
                const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]
                return `npm.${
       packageName.replace('@', '')}`
              }
            },
            commons: {
     
              name: 'Cesium',
              test: /[\\/]node_modules[\\/]cesium/,
              priority: 10,
              chunks: 'all'
            }
          }
        }
      },
      output: {
     
        sourcePrefix: ' '
      },
      amd: {
     
        toUrlUndefined: true
      },
      resolve: {
     
        alias: {
     
          vue$: 'vue/dist/vue.esm.js',
          '@': path.resolve('src')
        }
      },
      node: {
     
        fs: 'empty',
        Buffer: false,
        http: 'empty',
        https: 'empty',
        zlib: 'empty'
      },
      plugins: plugins
    }
  }
}
  • vue页面使用cesium
<template>
  <div id="cesiumContainer">div>
template>
<script>
import 'cesium/Build/Cesium/Widgets/widgets.css'
import {
       Viewer } from 'cesium'
import * as Cesium from "cesium/Source/Cesium.js"
export default {
      
  name: 'CesiumContainer',
  mounted() {
      
    new Viewer('cesiumContainer')
  }
}
script>

以上代码中vue中引入cesium时应该
import * as Cesium from "cesium/Source/Cesium.js"
这么引入,如果使用
import Cesium from 'cesium/Cesium'
引入则会报
was not found in 'cesium/Cesium'
错误,这是因为Cesium 1.63 版本之前是用的AMD的方式进行编译的,而在1.63版时使用ES6进行了重构,所以1.63之后的版本,导入模块时应该使用上面那种方式。

  • 最终效果

    参考:
    https://github.com/ShareQiu1994/cesium-vue

你可能感兴趣的:(前端VUE)