基于React脚手架集成Cesium

基于React脚手架集成Cesium

1. 安装环境

  1. 安装Node.js

    https://nodejs.org/en/download/

  2. 全局安装Yarn

    npm install -g yarn
    
  3. 全局安装React脚手架

    npm install -g create-react-app
    

2. 创建项目

注意:项目名称中不能包含大写字母

create-react-app 项目名称

在生成的项目文件中是看不到webpack相关的配置文件的,原因是React脚手架将webpack相关的配置隐藏起来了,但是集成Cesium时需要修改Webpack的配置,我们可以执行一个package.json文件中的一个脚本:“eject”: “react-scripts eject”

yarn run eject

安装依赖包

yarn 

3. 引入Cesium

安装cesium包,我这里指定了版本1.70.1

yarn add [email protected]

安装webpack相关依赖,注意指定版本,之前默认安装的最新版本,启动后报错:compilation.getCache is not a function

yarn add [email protected] --dev

4. 修改文件

修改文件之前先通过命令yarn start启动项目,查看是否正常。

  1. 之后停掉项目后,修改配置文件config/webpack.config.js

    添加const CopyWebpackPlugin = require('copy-webpack-plugin');

    2021-03-29_215011.png

    修改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('')
            }),
    

    2021-03-29_215558.png

    修改alias属性,添加如下内容,如果不加的话编译时会报错:Module not found: Can’t resolve 'cesium/Widgets/widgets.css’

      'cesium': path.resolve('node_modules/cesium/Source'),
    

    2021-03-29_220428.png

  2. 修改src/index.js

    添加内容:import 'cesium/Widgets/widgets.css'

    2021-03-29_215946.png

  3. 修改src/App.js,内容如下

    import React, {
          
           Component } from 'react';
    import * as Cesium from "cesium/Cesium";
    import './App.css';
     
    class App extends Component {
          
          
      componentDidMount() {
          
          
            Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI1NWI5MGUzNi1mYWI3LTQzY2QtOGI0Ni0xZWYyNTAxNGM4N2MiLCJpZCI6MTI1OTgsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1NjE0NDkyNTV9.hBH0PGSnKErc_yNhIePASUkr3QPDoo0KDX9uLpNBUns';
    		const viewer = new Cesium.Viewer("cesiumContainer");
    	}
      render() {
          
          
        return (
          <div id="cesiumContainer" />
        );
      }
    }
     
    export default App;
    
  4. 修改src/App.css,添加

    #cesiumContainer {
          
          
      height: 100vh;
    }
    
  5. 启动项目yarn start,查看效果

    2021-03-29_221827.png

5. 参考链接

猜你喜欢

转载自blog.csdn.net/wml00000/article/details/115313241