Skip to content
目录

工程

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>
<!-- 其他插件脚本 -->

This document is generated by mdpress