热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于webpack构建SuperMapiClientforJavaScript9D项目

作者小舜SuperMapiClientforJavaScript9D是云GIS网络客户端开发平台。基于现代Web技术栈全新构建,是SuperMap云四驾马车和在线GI

作者 小舜

SuperMap iClient for Javascript 9D 是云GIS网络客户端开发平台。基于现代Web技术栈全新构建,是SuperMap云四驾马车和在线GIS平台系列产品的统一JS客户端。 同以往不同的是,新一代的SuperMap iClient for Javascript进行了代码模块化,支持开发时使用 Javascript ES6 标准的 import 语法进行模块化引入并发布了npm项目,可以通过npm进行包管理。本文就主要聊聊如何在webpack下构建一个SuperMap iClient for Javascript工程。

什么是npm

npm是随同NodeJS一起安装的包管理工具,在工程化开发中,你可以将自己实现的功能代码封装成模块包,并上传到npm进行管理和供他人使用,它

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用

由于新版的NodeJS已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 “npm -v” 来测试是否成功安装。命令如下,出现版本提示表示安装成功:

$ npm -v
5.6.0

SuperMap iClient for Javascript全面集成了Openlayers,Leaflet,MapboxGL 领先的开源地图库、可视化库。其下载地址分别为

npm install @supermap/iclient-openlayersnpm install @supermap/iclient-leafletnpm install @supermap/iclient-mapboxgl

什么是webpack

webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。你可以把它看做是模块打包器,分析你的项目结构,找到Javascript模块以及其它的一些浏览器不能直接运行的拓展语言或文件类型,并将其转换和打包为合适的格式供浏览器使用。那么为什要使用WebPack?现今的很多网页其实可以看做是功能丰富的应用,它们拥有着复杂的Javascript代码和一大堆依赖包。为了简化开发的复杂度,前端社区涌现出了很多好的实践方法,比如组件化、css预处理、类似TypeScript的js拓展开发语言等;这些改进确实大大的提高了我们的开发效率,但是利用它们开发的文件往往需要进行额外的处理才能让浏览器识别,而手动处理又是非常繁琐的;webpack这类的工具的出现就良好的解决了这类问题。首先我们就要安装webpack,
使用npm我们可以安装webpack

npm install webpack -g

webpack默认以项目根目录下的webpack.config.js作为配置文件。我们构建iClient项目主要就是修改这个文件。

配置基于Leaflet的iClient项目

首先我们要安装Leaflet和 @supermap/iclient-leaflet。

npm install leaflet @supermap/iclient-leaflet -S

其次由于使用了es6的语法,我们需要配置babel编译器以让浏览器能够兼容使用。先安装babel相关的库

npm install babel-core babel-loader babel-preset-env babel-preset-stage-3 -D

然后在webpack.config.js配置文件中设置我们需要的model.rules

{test: /\.js$/,loader: 'babel-loader',include: [path.resolve(__dirname, "node_modules/@supermap/iclient-common"),path.resolve(__dirname, "node_modules/@supermap/iclient-leaflet"),path.resolve(__dirname, "node_modules/elasticsearch"),]
}

@supermap/iclient-common是iclient-leaflet的基础库,安装iclient-leaflet时会自动安装,elasticsearch也是client-leaflet的依赖库之一;由于都是采用了es6语法编写所以都需要用babel进行编译,配置好后就可以通过import方式引入啦

import L from 'leaflet';
import {tiledMapLayer} from '@supermap/iclient-leaflet';

@supermap/iclient-leaflet全都采用了模块化方式进行封装,所以可以使用ES6的解构语法,按需引入tiledMapLayer。iclient-openlayers,iclient-mapboxgl项目配置方法和iclient-leaflet配置方法也是类似,这里就不做详述。

配置基于iclient-classic的项目

iclient-classic前身是SuperMap iClient for Javascript ,在8C基础上增加了9D的相关新功能特性发布到npm上;如果您在项目中直接引入iclient-classic并进行开发会报错。

import '@supermap/iclient-classic';
var map = new SuperMap.Map("map", {});//报错 未找到SuperMap

由于iclient-classic是以SuperMap iClient for Javascript 8c为基础的所以还需要引入SuperMap iClient for Javascript 8c的相关库;我们先在webpack配置中给src目录配置别名

resolve: {alias: {'~':path.resolve(__dirname,'src')
}}

然后在超图技术资源中心下载iClient for Javascript 8c开发包(下载地址http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?id=666),并将其中lib文件夹拷贝到src目录中同时更名为icl8c(文件夹名字随意,这里只是做区分),然后在主入口js文件中将8c的库引入进来

import '~/icl8c/SuperMap-8.1.1-14620'
import classic from '@supermap/iclient-classic';
var map = new SuperMap.Map("map", {...});

通过webpack-dev-server运行起来就可以看到地图啦!
需要注意一点:webpack编译后的文件需要通过http方式访问才能出图哦。

webpack的配置其实是很灵活的,这里只是简单提供一个思路,相信有更多的大牛有自己的项目优化方案,有更好的请在下方留言吧!


推荐阅读
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
author-avatar
阿莱沃_132
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有