[react] react 学习(一) | 创建react+ts+cesium项目 配置webpack

前言

准备最近抽空学习一下react框架,作为一名gisr 职业发展也不能仅局限gis,能够结合gis+web前端比单一研究gis带来的收益更高。

为什么选择react而不是vue呢(忽略angular..)?并不是vue不够优秀,而是公司需要和大型项目的适应,同样也是大厂的首选项。

准备先按官方的资料和github撸一个demo,后面再学学 TypeScript + React Hook开发栈。

步骤

环境说明 :操作系统: win10  , nodeJs:15.2.0 , npm:7.0.8  , ide:vscode

创建项目

1. 在github拉取快速创建 react + ts 项目的开源插件

插件地址:  https://github.com/jpavon/react-scripts-ts

执行 npm i 

注意这里需要node-sass 会被墙 需要指向淘宝镜像

npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass

2 完成安装依赖源 , 创建新项目

 执行命令

npx create-react-app map3d --scripts-version=@jpavon/react-scripts-ts
cd map3d/
yarn start

启动成功 :

由于使用了CRA 脚手架,它与其他脚手架不同的一个地方就是将一些复杂工具(比如 webpack)的配置封装了起来,让使用者不用关心这些工具的具体配置,从而降低了工具的使用难度 

 这里完成了项目的创建,但是集成Cesium需要配置webpack

3.  释放webpack等配置文件

由于create-react-app是基于webpack的项目,生成时自动隐藏webpack配置项,需要把webpack配置文件暴露出来,需要执行npm run eject将config等配置文件出来(注意操作不可逆)

npm run eject

操作完成!

4. 修改webpack.config.js文件

配置路径和参数

/** 配置Cesium静态资源访问 */
const CopyWebpackPlugin = require('copy-webpack-plugin');
/** cesium访问路径标识 导入模块默认寻找Source下面 */
const cesiumSource = 'node_modules/cesium/Source';
const cesiumWorkers = '../Build/Cesium/Workers';
const fileFolder = 'src';

添加amd

添加字符缩减

/解决报错  解决Critical dependency: require function is used in a way in which dependencies cannot be statically extracted的问题

添加定义的cesium模块

拷贝静态资源

完成配置!

其实这里也可以通过cdn的方式加载cesium,通过window.Cesium设置一下Cesium.buildModuleUrl.setBaseUrl("/Cesium/")路径就行。

开发一个三维组件

1.  在src/index文件中引入样式文件

2. 编写一个路由App

3 自定义路由组件

4. 开发一个组件页面 map3d

/** 组件样式文件 */
import map3DStyle from './index.module.less';
/** 从react中获取React对象 和 Components组件 */
import React, { Component } from 'react';
/** 导入cesium模块 */
import * as Cesium from 'cesium/Cesium'

/** 使用react的Component组件对象自定义map3d组件 */
export default class Map3D extends Component {

  /** 数据初始化 */
  constructor(props) {
    super(props)
    this.state = {}
  }

  /** dom完成第一次渲染执行函数 */
  componentDidMount() {

    this.initMap()
  }

  /** 初始化地图 */
  initMap() {
    // 将viewer对象放在window环境下
    window.viewer  = new Cesium.Viewer('cesiumContainer')
  
  }

  /** 逻辑渲染 */
  render() {
    
    // 构建虚拟dom
    return (
      <div className={ map3DStyle.viewer } >
        <div id="cesiumContainer" className={ map3DStyle.cesiumContainer } ></div>
      </div>
    )
  }
}

5. 这里用到less,也需要在webpack.config.js中配置

安装依赖

npm i less --save
npm i less-load --save

添加正则判断

修改getStyleLoaders函数

添加less解析

在map3d中引入less文件

import map3DStyle from './index.module.less';

这里css-module需要将less文件命名后缀为 .module.less才能编译

完成组件开发!

执行命令

yarn start

启动成功!

demo地址:https://github.com/zhangti0708/map3d

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值