加載Cesium的React應用

研究了一整天,終于將cesium加入到了react中 特此感謝 http://ecnuzlwang.cn/declarative-earth-part-1-cesium-webpack/

接下來我將一步一步實現(xiàn)如何將cesium 應用到react中
github項目地址

react 版本16.0.0 cesium 版本 1.41.0

1.首先 創(chuàng)建一個react項目

create-react-app  react-cesium-demo

2.創(chuàng)建完成后將cesium 安裝到新建的項目中

npm install cesium

3.執(zhí)行npm run eject命令

由于我們用的Create-React-App不能直接獲取Webpack配置文件,因為CRA默認隱藏了文件。所以我們要用CRA的“安全艙口”:npm run eject命令。
該命令可以復制CRA的配置文件到我們的項目中

npm run eject

完成后的目錄會會多出config、scripts文件夾 并且package.json文件執(zhí)行也改變了, 執(zhí)行信息會提示,留意一下


目錄.png

4.瀏覽$PROJECT/node_modules/cesium/Build/。你會發(fā)現(xiàn)兩個文件夾,Cesium和CesiumUnminified。復制整個Cesium文件夾到PROJECT/public/,重命名為cesium。然后,刪除文件夾里面的Cesium.js文件,

那么,你現(xiàn)在擁有以下文件夾架構:

publick目錄.png

5.設置運行Cesium 所需的webpack 配置項

我們需要設置sourcePrefix: ' ',讓Webpack正確縮進多行字符串。

然后設置unknownContextCritical: false,不讓Webpack打印載入特定庫時候的警告。

在設置 unknownContextRegExp: /^./.*$/,為了解決Error: Cannot find module "."該錯誤

在 "config/webpack.config.dev.js output"中加入


sourcePrefix.png

在 config/webpack.config.dev.js module中加入


module更改.png

以上配置需要在開發(fā)模式和產品模式中都配置

6.加載Cesium到應用中

在加載Cesium之前需要配置Cesium,讓它知道如何為所有資源構造URL。需要調用Cesium自帶的buildModuleUrl()函數(shù)。完成后,就可以加載Viewer實例并讓Cesium工作。

src/index.js

import React from 'react';

import ReactDOM from 'react-dom';

import './index.css';

import "cesium/Source/Widgets/widgets.css";

import App from './App';

import registerServiceWorker from './registerServiceWorker';

import buildModuleUrl from "cesium/Source/Core/buildModuleUrl";

buildModuleUrl.setBaseUrl('./cesium/');

ReactDOM.render(<App />, document.getElementById('root'));

registerServiceWorker();

然后,在componentDidMount方法中我們創(chuàng)建一個Cesium.Viewer實例,將真實節(jié)點的引用作為viewer的容器。

src/App.js

import React, { Component } from 'react';

import Viewer from "cesium/Source/Widgets/Viewer/Viewer";

class App extends Component {  
    componentDidMount() {
        this.viewer = new Viewer(this.cesiumContainer);
    }

    render() {
        return (
            <div>
                <div id="cesiumContainer" ref={ element => this.cesiumContainer = element }/>
            </div>
        );
    }
}

export default App

執(zhí)行命令運行訪問

npm start
成功運行后截圖.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容