工程
maptalks是个纯的js库,不依赖任何框架,可以和前端的任意框架进行结合,不管是你是用现代化的Vue/React
还是传统的jQuery
用户,其都可以和你的项目很好的结合.
库/框架 | |
---|---|
原生JS | |
React | |
Vue | |
Vue-next | |
Solid | |
Svelte | |
Preact | |
Angular | |
jQuery |
关于maptalks所提供的包
目前maptalks提供了个两种打包个格式:
- ESM格式的,方便喜欢打包(一般都是webpack,vite,vue-cli等)和现代化的用户,用起来是这样的
sh
npm i maptalks
# or
npm i maptalks-gl
js
import { VectorTileLayer, Map } from "@maptalks/gl-layers";
const map = new Map("map", {
// ....
});
- UMD格式的,方便一些传统用户习惯,不喜欢打包的用户,用起来是这样的
html
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/maptalks/dist/maptalks.css"
/>
<!-- 引入完成的功能包括webgl -->
<script
type="text/javascript"
src="https://cdn.jsdelivr.net/npm/maptalks-gl/dist/maptalks-gl.min.js"
></script>
<!-- 其他插件脚本 -->
<script>
const map = new maptalks.Map("map", {
// ....
});
</script>
传统的script标签引入
向我这样的老的同学可能喜欢以
html
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/maptalks/dist/maptalks.css"
/>
<!-- 引入完成的功能包括webgl -->
<script
type="text/javascript"
src="https://cdn.jsdelivr.net/npm/maptalks-gl/dist/maptalks-gl.min.js"
></script>
<!-- 其他插件脚本 -->
<!-- 其他的插件包,例如maptalks.three等 -->
<script>
const map = new matpalks.Map("map", {
// ...
});
</script>
的方法引入,也是可以的,尤其是强GIS项目,反正每个页面都用到地图,打包显得没有任何意义(个人见解)
- 这些公共的类库又不改其代码,每次都打包浪费时间和资源
- 打包应该仅限于自己的业务代码,而不是这些我们根本不会去动其源码的第三方库
用script引入了,写业务代码时可以用ESM的方式吗?
可以的,目前市面上的打包工具都提供了了 externals
功能的
DANGER
注意maptalks
包还是需要安装的
sh
npm i maptalks
TIP
因为maptalks的插件包导出的命名空间基本都是maptalks
命名空间,所以设置externals
时, 只需要设置一个maptalks就可以了,插件里导出的变量都会挂载到maptalks
命名空间,设置方法如下:
- webpack(一般是自己搭建的脚手架/React/Angular等)
js
//weppack.config.js
externals: {
maptalks: "maptalks";
}
- vue-cli
js
//vue.config.js
configureWebpack: {
externals: {
maptalks: "maptalks"
},
}
- vitejs
js
//vite.config.js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { viteExternalsPlugin } from "vite-plugin-externals";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
viteExternalsPlugin({
maptalks: "maptalks",
}),
],
});
这样在业务代码里我们既可以愉快的写
js
//导出所有变量
import { Map, VectorTileLayer, ThreeLayer } from "maptalks";
const map = new Map("map", {
// ...
});
//或者
// import {Map,VectorTileLayer,ThreeLayer,....} from 'maptalks';
// ....
也可以不去打包maptalks
的生态包了,项目打包时间将大大缩短了
DANGER
注意你的html页面需要引入maptalks
的和你要使用的插件的umd
脚本
html
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/maptalks/dist/maptalks.css"
/>
<!-- 引入完成的功能包括webgl -->
<script
type="text/javascript"
src="https://cdn.jsdelivr.net/npm/maptalks-gl/dist/maptalks-gl.min.js"
></script>
<!-- 其他插件脚本 -->