webpack+ES6+SuperMap iClient for MapboxGL学习笔记

2023-11-11

一、基本介绍

1、SuperMap iClient for MapboxGL 介绍

SuperMap iClient for MapboxGL 是一套基于 MapboxGL 的云 GIS 网络客户端开发平台,支持访问 SuperMap iServer / iEdge / iPortal / iManager / Online 的地图、服务和资源,为用户提供了完整专业的 GIS 能力,同时提供了优秀的可视化功能。

2、webpack 介绍

webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundle)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。

如图所示,webpack 可以将各种格式的文件或者依赖模块,打包成浏览器兼容的 js、css、图片等。如我们可以用 CSS 预处理语言 SASS 来写样式,通过配置 webpack 打包成转译为原生 CSS 的方式,使用 ES6 代替原生 JavaScript 开发,通过 webpack 打包成原生 js。我们使用 SASS 和 ES6 的目的是因为它们精简的写法和好用的新特性。

二、环境搭建

1、package.json文件创建和介绍

搭建基于 webpack 的前端开发环境,新建一个工程目录为 iCientDemo,根目录下运行 npm init,即可初始化生产一个 package.json 文件,然后配置成如下:

{
  "name": "08webpack-demo",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "build": "node_modules/.bin/webpack --config webpack.config.js",
    "start": "node_modules/.bin/webpack-dev-server --config webpack.config.js",
    "release": "node_modules/.bin/webpack --config webpack.release.config.js",
    "serve-release": "node_modules/.bin/webpack-dev-server --config webpack.release.config.js --content-base /dist"
  },
  "author": {
    "name": "oceanbest111",
    "url": "http://oceanbest111.com"
  },
  "license": "Apache-2.0",
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.5",
    "babel-preset-env": "^1.7.0",
    "babel-preset-es2015": "^6.24.1",
    "copy-webpack-plugin": "^4.0.1",
    "css-loader": "^0.28.7",
    "html-webpack-plugin": "^2.30.1",
    "strip-pragma-loader": "^1.0.0",
    "style-loader": "^0.18.2",
    "uglifyjs-webpack-plugin": "^1.0.0-beta.3",
    "url-loader": "^0.6.2",
    "webpack": "^3.5.6",
    "webpack-dev-server": "^2.9.1"
  },
  "dependencies": {
    "@supermap/iclient-mapboxgl": "^10.0.0",
    "babel-plugin-transform-remove-console": "^6.9.4"
  }
}

简要介绍下 package.json 中主要属性的含义:

  • name 项目名称
  • version 项目版本号
  • description 项目描述
  • mian 主入口文件,一般是 js 文件
  • scripts 脚本命令配置,这里配置了可以使用 npm run xxx 的命令方式执行对应配置命令,如输入 npm run build,则执行的是 "node_modules/.bin/webpack --config webpack.config.js"
  • license 软件协议
  • devDependencies 工程开发环境依赖模块 module,开发时才需要,比如 webpack\babel 等开发环境打包编译用的
  • dependencies 工程依赖模块 module,比如 jquery 等这种项目依赖的 JS 库

一般一个前端项目中所用到的所有技术点,都会包含在 package.json 文件中(其实有点类似 Java 工程项目中用 Maven 管理的 pom.xml 文件)。故我们在 github 上看任何开源项目或 demo,可以优先看 package.json 文件,即可大致了解该项目所用的技术点。

2、安装依赖

有了 package.json 文件后,我们可以使用 npm install(可以缩写为 npm i)执行来安装依赖的 module,也就是 devDependencies 和 dependencies 下指定的所有 module 都会自动下载到项目根目录下的 node_modules 里面。(若需要提交到 git 仓库,建议创建 .gitignore 文件,忽略掉 node_modules 文件夹)

(IDEA 或者 WebStorm 等开发工具可以在 View-Tool Windows-Terminals 调出控制台)

安装完成依赖后,根目录新建 webpack.config.js 文件,进入如下配置:

/**
 * Created by chenhaiyang on 2019/12/2.
 */
const path = require('path');
const webpack = require('webpack');
// 插件
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 可以操作html文件
const CopyWebpackPlugin = require('copy-webpack-plugin'); // 用于拷贝

const rootPath = './';  

module.exports = [{
    // __dirname 表示当前项目根目录
    context: __dirname,
    // 入口文件
    entry: {
        app: rootPath + 'app.js'
    },
    // 打包输出文件配置
    output: {
        // [name] 对应的是底部使用 CommonsChunkPlugin插件的name
        filename: '[name].js',
        // 打包文件输出目录dist
        path: path.resolve(__dirname, 'dist'),

        // Needed  for multiline strings
        sourcePrefix: ''
    },
    amd: {
        // Enable webpack-friendly use of require in
        toUrlUndefined: true
    },
    node: {
        // Resolve node module use of fs
        fs: "empty"
    },
    // 插件来处理指定文件,下边处理css文件和图片附件等
    module: {
        rules: [
        {
            test: /\.css$/,
            use: ['style-loader', 'css-loader']
        }, {
            test: /\.(png|gif|jpg|jpeg|svg|xml|json|gltf)$/,
            use: ['url-loader']
        },{
            test: /\.js$/,
            loader:'babel-loader?presets=es2015',
            include:[
                path.resolve(__dirname, "node_modules/@supermap/iclient-common"),
                path.resolve(__dirname, "node_modules/@supermap/iclient-mapboxgl"),
                // 由于iClient对Elasticsearch的API进行了封装而Elasticsearch也使用了ES6的语法
                path.resolve(__dirname, "node_modules/elasticsearch")
            ],
            options: {
                presets: ['env']
            }
        }]
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: rootPath + 'index.html'
        }),
        // Copy Assets, Widgets, and Workers to a static directory--若要使用静态资源,需在这里面配置
        new CopyWebpackPlugin([{ from: 'css', to: 'css' }]),
        // 复制文件或者目录
        // Copy Assets, Widgets, and Workers to a static directory
        /*  new CopyWebpackPlugin([
         {from: 'test/lib', to: 'lib'},
         {from: 'src/SourceData', to: 'SourceData'}
         ]), */
        new webpack.DefinePlugin({
            // Define relative base path in  for loading assets
            _BASE_URL: JSON.stringify('')
        }),
        // 分割代码为单个bundle,提取公共代码
        new webpack.optimize.CommonsChunkPlugin({
            name: 'ocean', // name是指定打包后的代码文件名称,自己随意取
            minChunks: function (module) {
                return module.context && module.context.indexOf('ocean') !== -1;
            }
        })
    ],

    // development server options
    devServer: {
        contentBase: path.join(__dirname, "dist")
    }
}];

3、ES6 模块语法支持和 SuperMap iClient for MapboxGL 模块化安装

通过Babel可以将ES6编译为ES5,下边介绍在webpack配置文件中配置babel,首先下载依赖:

npm install --save-dev babel-loader@7 babel-core babel-preset-es2015

安装 SuperMap iClient for MapboxGL:

npm install @supermap/iclient-mapboxgl

然后在 webpack.config.js 文件中的 module 插件模块中加入一个 loaders 加载器:

{
            test: /\.js$/,
            loader:'babel-loader?presets=es2015',
            include:[
                path.resolve(__dirname, "node_modules/@supermap/iclient-common"),
                path.resolve(__dirname, "node_modules/@supermap/iclient-mapboxgl"),
                // 由于iClient对Elasticsearch的API进行了封装而Elasticsearch也使用了ES6的语法
                path.resolve(__dirname, "node_modules/elasticsearch")
            ],
            options: {
                presets: ['env']
}

注意:这里面如果直接 npm run start,则会报错:Module build failed: error:couldn't find preset "env" relative to directory,解决办法是需要安装 babel-preset-env 依赖,直接在控制台输入:npm install babel-preset-env

4、webpack 作为运行环境运行 Demo

根目录下新建 index.html 文件,输入如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>iCientDemo</title>
    <script src="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.0.4/mapbox-gl-draw.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/mapbox-gl/1.3.1/mapbox-gl.css" rel="stylesheet" />
    <link href="css/iclient-mapboxgl.css" rel="stylesheet" />
</head>
</html>
<body>
<!-- 地图显示的div -->
<div id="map" style="width:100%;height: 800px;"></div>
</body>
</html>

然后在根目录下新建主入口文件 app.js(注意 app.js 文件名要与 package.json 文件下的 "main"对应的文件名一致,否则有问题):

import mapboxgl from 'mapbox-gl';
import  '@supermap/iclient-mapboxgl';

//绘制点线面
var host = window.isLocal ? window.server : "http://support.supermap.com.cn:8090";
var url = host + "/iserver/services/map-world/rest/maps/World/zxyTileImage.png?prjCoordSys={\"epsgCode\":3857}&z={z}&x={x}&y={y}";
var attribution = "<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox </a>" +
    "with <span>© <a href='http://iclient.supermap.io' target='_blank'>SuperMap iClient</a> | </span>" +
    " Map Data <span>© <a href='http://support.supermap.com.cn/product/iServer.aspx' target='_blank'>SuperMap iServer</a></span> ";
var map = new mapboxgl.Map({
    container: 'map',
    style: {
        "version": 8,
        "sources": {
            "raster-tiles": {
                "attribution": attribution,
                "type": "raster",
                "tiles": [url],
                "tileSize": 256,
            },
        },
        "layers": [{
            "id": "simple-tiles",
            "type": "raster",
            "source": "raster-tiles",
            "minzoom": 0,
            "maxzoom": 22
        }]
    },
    center: [-74.50, 40],
    maxZoom: 18,
    zoom: 2,
});
map.addControl(new mapboxgl.supermap.LogoControl(), 'bottom-right');
map.addControl(new mapboxgl.NavigationControl(), 'top-left');

//mapbox 绘制要素图形控件
var Draw = new MapboxDraw();
map.addControl(Draw,'top-left')

注意:在 index.html 文件里面可以不用写 app.js 的引用路径(之前在这里多写了,反而报错),因为在 package.json 里面已经写过了。

然后在控制台上输入 npm run start 命令(其本质是运行 package.json 文件中配置的 node_modules/.bin/webpack-dev-server --config webpack.config.js)即可运行整个项目,结果如下:

三、资源下载地址

https://download.csdn.net/download/Ocean111best/12025964

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webpack+ES6+SuperMap iClient for MapboxGL学习笔记 的相关文章

随机推荐

  • C1认证学习笔记(第一章)

    C1认证 一 计算机通识 进制转换 进制定义 进制之间的转换 任务训练练习 信息单位 单位定义 换算公式 任务训练练习 数据校验 任务背景 奇偶校验 任务训练练习 多媒体基础参数 任务背景 参数定义 计算公式 任务训练练习 HTTP 任务背
  • 【Transformer】12、Do Vision Transformers See Like Convolutional Neural Networks?

    文章目录 一 背景 二 方法 论文链接 https arxiv org pdf 2108 08810 pdf 出处 NeurIPS2021 一 背景 Transformer 现在在视觉方面取得了超越 CNN 的效果 所以作者就有一个问题 T
  • SQL server2019安装教程

    建议 建议给位看官先看完再动手 也可以多搜索其他的文章多看看 心里有数儿了再按照文档执行 有条件的在虚拟机里面跑一遍 下载必备 由于安装文件太大 所以没有办法上传 各位就请自行下载 我尝试着加一下链接SQL引导包的链接 也就是图片中的第二个
  • leetcode#26 Remove Duplicates from Sorted Array

    给定一个排序数组 你需要在原地删除重复出现的元素 使得每个元素只出现一次 返回移除后数组的新长度 不要使用额外的数组空间 你必须在原地修改输入数组并在使用 O 1 额外空间的条件下完成 示例 1 给定数组 nums 1 1 2 函数应该返回
  • JS 数组求和的5种方法(解题报告)

    转自牛客网 题目 题目描述 计算给定数组 arr 中所有元素的总和 输入描述 数组中的元素均为 Number 类型 输入例子 sum 1 2 3 4 输出例子 10 不考虑算法复杂度 用递归做 1 2 3 4 5 6
  • 推荐10个AI人工智能技术网站

    推荐 将 NSDT场景编辑器加入你的3D工具链 3D工具集 NSDT简石数字孪生 1 AI Trends AI Trends https www aitrends com 是一个专注于人工智能领域的网站 它提供了最新的AI技术和应用趋势的报
  • C++ 常用数学函数详解汇总#include<math.h>

    目录 前言 一 头文件 二 常用函数 1 开平方 2 求常数e的x次方 3 求常数x的y次方 4 求对数lnx lgx 5 求x绝对值 6 取整函数 7 产生随机数 8 取整与取余 9 三角函数 10 反三角函数 11 的表示 前言 在实际
  • 左神-11 动态规划(仔细看end)

    最长递增子序列 01背包问题 硬币找零问题 用空间换时间 1 2 3 4 5 6 end 转载于 https www cnblogs com h3953774 p 7307790 html
  • 卷麻了,00后测试用例写的比我还好,简直无地自容.....

    前言 作为一个测试新人 刚开始接触测试 对于怎么写测试用例很头疼 无法接触需求 只能根据站在用户的角度去做测试 但是这样情况会导致不能全方位的测试APP 这种情况就需要一份测试用例了 但是不会写 求指教 还有就是测试出来的bug该如何追踪
  • Prometheus Node_exporter 之 Node Exporter

    Node Exporter 1 Node Exporter Scrape Time type GraphUnit secondsLabel Seconds collector 各个收集器持续时间metrics node scrape col
  • 安全SaaS,在中国TO B中艰难成长

    无论是一体化 还是以业务为中心专攻政企或金融客户 还是针对中小微企业市场推出免费产品 都可能成为未来安全SaaS规模化的发展路径 作者 斗斗 编辑 皮爷 出品 产业家 5G 物联网 AI 云计算等技术的应用 让生产 服务过程加速数字化 云化
  • 【Qt】UI显示中文

    QT UI显示中文的三种方法 最近在用Qt做项目 遇到UI不能显示中文的问题 发现有3种方法可以解决 先记录一下 方法一 QString fromLocal8Bit 你好中国 1 方法二 QStringLiteral 你好中国 1 方法三
  • cmake 报错

    目录 错误 原因 错误 The C compiler identification is unknown The CXX compiler identification is unknown CMake Error at CMakeList
  • Android加载圆形(圆角)图片的方式总结(RoundedBitmapDrawable、Glide)

    一 问题引入 Android开发中经常要使用到ImageView 而ImageView控件自带的宽度width 高度height等属性无法让ImageView呈现出圆形 圆角这样的形状 相信很多小伙伴都和我一样为这个问题苦恼 现在介绍几种方
  • 2022如何做副业?35岁前,千万别让死工资绊住你赚钱的步伐

    近年来互联网行情下降 好多人都在思考要不要搞个副业来抵御风险 这不又来事了 这两天又爆了互联网大裁员 继阿里 向社会输送人才 之后 京东又搞了个 毕业礼 整的小伙伴们人心惶惶 副业的关注度又一波升级 那今天我们就来聊聊 程序员做副业这件事
  • 【计算机视觉

    文章目录 一 检测相关 11篇 1 1 BandRe Rethinking Band Pass Filters for Scale Wise Object Detection Evaluation 1 2 Morphological Ima
  • java 静态代理和动态代理

    什么是代理 从字面意思来说 代理就是代替处理的意思 从程序层面来说 代理就是代替某个程序 处理某个事情 静态代理 场景1 小明需要买基金 public class Main public static void main String ar
  • NFS服务高可用方案

    文章目录 NFS服务高可用方案 1 简述 2 硬件和网络需求 3 安装 DRBD 3 1 安装DRBD 3 2 编辑配置文件 3 3 初始化设备 4 NFS服务安装 4 1 安装服务 4 2 配置 5 安装heartbeat 5 1 安装
  • linux 查看文件夹大小

    du sh 查看当前目录下的文件夹大小 du 命令 用途 概述磁盘使用 语法 du a s k m g l r x H L File 描述 du命令显示用于文件的块的数量 如果指定的File参数实际上是一个目录 就要报告该目录内的所有文件
  • webpack+ES6+SuperMap iClient for MapboxGL学习笔记

    一 基本介绍 1 SuperMap iClient for MapboxGL 介绍 SuperMap iClient for MapboxGL 是一套基于 MapboxGL 的云 GIS 网络客户端开发平台 支持访问 SuperMap iS