Reputation: 79
Using Vue 3 + typescript + vite.
Have set up the project with Vite + Vue 3 +typescript. Having trouble using google maps because it needs to be paid. So then tried the Mapbox and the map section is working fine, but when adding the MapboxGeocoder the error is showing.
Getting this error
TypeError: EventEmitter is not a constructor
at new MapboxGeocoder (index.js:74)
at temp.vue:30
at callWithErrorHandling (runtime-core.esm-bundler.js:6668)
at callWithAsyncErrorHandling (runtime-core.esm-bundler.js:6677)
at Array.hook.__weh.hook.__weh (runtime-core.esm-bundler.js:1931)
at flushPostFlushCbs (runtime-core.esm-bundler.js:6869)
at render2 (runtime-core.esm-bundler.js:4807)
at mount (runtime-core.esm-bundler.js:3140)
at Object.app.mount (runtime-dom.esm-bundler.js:1572)
at main.ts:16
How to solve this error. Need help.
code block
<script setup lang="ts">
import mapboxgl from "mapbox-gl";
import MapboxGeocoder from "@mapbox/mapbox-gl-geocoder";
import "@mapbox/mapbox-gl-geocoder/dist/mapbox-gl-geocoder.css";
onMounted(() => {
try {
mapboxgl.accessToken =
"TOKEN";
const map = new mapboxgl.Map({
container: "map", // container ID
style: "mapbox://styles/mapbox/streets-v11", // style URL
center: [-74.5, 40], // starting position [lng, lat]
zoom: 9, // starting zoom
});
map.addControl(
new MapboxGeocoder({
accessToken: mapboxgl.accessToken,
})
);
} catch (error) {
console.log("Error on mapbox creation: ", error);
}
});
</script>
Upvotes: 5
Views: 7343
Reputation: 199
I ran into a very similar problem with vanilla JS and vite.
Digging through vite's issues i found this: https://github.com/vitejs/vite/issues/2694#issuecomment-826195660 which worked for me. Maybe someone more knowledgeable will be able to explain exactly what is happening. I'd guess some bugs need to be ironed out in mapbox-gl, vite, or both.
Anyway, i did:
npm i events
npm i --save-dev @types/events @types/node
And it's now working! Hopefully it will work for you too.
Upvotes: 12