Vue + Vite

View source
在纯 Vue + Vite 项目中经 @movk/mapbox/vite 与 vue-plugin 使用同一套组件。

Vite 插件

vite.config.ts 中加入插件,负责组件与 composables 的自动导入:

vite.config.ts
import vue from '@vitejs/plugin-vue'
import Mapbox from '@movk/mapbox/vite'

export default defineConfig({
  plugins: [vue(), Mapbox()]
})

Mapbox() 内部自动注册组件解析器与自动导入项,独立 Vue + Vite 项目直接使用即可。

复用已有 unplugin 实例

部分库(如 @nuxt/ui)的 Vite 插件内置了唯一的 unplugin-vue-components / unplugin-auto-import 实例。这时无需再加 Mapbox(),改用 @movk/mapbox/unplugin 导出的 mapboxComponentResolvermapboxAutoImports,注入宿主插件复用:

vite.config.ts
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
import { mapboxAutoImports, mapboxComponentResolver } from '@movk/mapbox/unplugin'

export default defineConfig({
  plugins: [
    vue(),
    ui({
      components: { resolvers: [mapboxComponentResolver()] },
      autoImport: { imports: [...mapboxAutoImports()] }
    })
  ]
})
@nuxt/ui 检测到第二个 unplugin-vue-components / unplugin-auto-import 实例会直接抛错,因此与其同用时务必走注入复用方式,而非再叠加 Mapbox()

mapboxComponentResolver 默认以 Mapbox 为组件前缀,可通过 mapboxComponentResolver({ prefix: 'Mb' }) 自定义。

注册 Vue 插件

在入口注册 vue-plugin,传入 token 并引入运行时样式:

main.ts
import { createApp } from 'vue'
import MapboxPlugin from '@movk/mapbox/vue-plugin'
import '@movk/mapbox/index.css'
import App from './App.vue'

createApp(App)
  .use(MapboxPlugin, {
    accessToken: import.meta.env.VITE_MAPBOX_TOKEN,
    tiandituToken: import.meta.env.VITE_TIANDITU_TOKEN
  })
  .mount('#app')

配套 .env

.env
VITE_MAPBOX_TOKEN=pk.your_mapbox_access_token
VITE_TIANDITU_TOKEN=your_tianditu_tk

用法一致

组件与 composables 由 @movk/mapbox/vite 自动导入,用法与 Nuxt 完全一致:

App.vue
<script setup lang="ts">
const center = ref<[number, number]>([116.397, 39.908])
</script>

<template>
  <div style="height: 480px">
    <MapboxMap v-model:center="center" :options="{ style: 'mapbox://styles/mapbox/streets-v12', zoom: 9 }">
      <MapboxNavigationControl position="top-right" />
    </MapboxMap>
  </div>
</template>
Copyright © 2026 - 2026 YiXuan - MIT License