При использовании HERE Maps API в современных веб-приложениях всё чаще применяется установка через npm вместо подключения скриптов из CDN. Такой подход обеспечивает более удобное управление зависимостями, лучшую интеграцию со сборщиками модулей и возможность использовать возможности экосистемы JavaScript.
Менеджер пакетов npm позволяет:
Вместо прямого подключения внешних скриптов через HTML-разметку библиотека устанавливается в каталог проекта и становится частью системы сборки.
Перед установкой необходимо наличие следующих компонентов:
Проверка установленных версий:
node -v
npm -v
Создание нового проекта:
mkdir here-maps-project
cd here-maps-project
npm init -y
После выполнения команды появится файл:
package.json
Он содержит информацию о проекте и список зависимостей.
HERE предоставляет JavaScript API через пакет:
npm install @here/maps-api-for-javascript
После установки зависимость автоматически добавляется в файл
package.json:
{
"dependencies": {
"@here/maps-api-for-javascript": "^1.x.x"
}
}
Пакет помещается в каталог:
node_modules/
Структура проекта может выглядеть следующим образом:
project/
│
├── node_modules/
├── src/
│ ├── main.js
│ └── styles.css
│
├── package.json
└── vite.config.js
Современные сборщики работают с системой модулей ES Modules.
Пример импорта:
import H from '@here/maps-api-for-javascript';
После импорта становится доступно пространство имён HERE:
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
Получение объекта карты:
const defaultLayers = platform.createDefaultLayers();
const map = new H.Map(
document.getElementById('map'),
defaultLayers.vector.normal.map,
{
zoom: 10,
center: { lat: 55.7558, lng: 37.6176 }
}
);
Такой подход отличается от классического подключения через глобальный
объект window.H, поскольку все зависимости импортируются
явно.
Vite является одним из наиболее популярных инструментов сборки для современных веб-приложений.
Создание проекта:
npm create vite@latest here-vite
Переход в каталог:
cd here-vite
Установка зависимостей:
npm install
Установка HERE Maps:
npm install @here/maps-api-for-javascript
Запуск сервера разработки:
npm run dev
Файл:
src/main.js
Содержимое:
import H from '@here/maps-api-for-javascript';
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
const defaultLayers = platform.createDefaultLayers();
const map = new H.Map(
document.getElementById('map'),
defaultLayers.vector.normal.map,
{
zoom: 12,
center: {
lat: 48.8566,
lng: 2.3522
}
}
);
window.addEventListener('resize', () => {
map.getViewPort().resize();
});
HTML-шаблон:
<div id="map"></div>
CSS:
#map {
width: 100%;
height: 100vh;
}
После запуска проекта карта будет отображаться через систему модулей Vite.
Webpack остаётся одним из самых распространённых сборщиков для крупных приложений.
Установка:
npm install webpack webpack-cli webpack-dev-server --save-dev
Установка HERE Maps:
npm install @here/maps-api-for-javascript
Создание конфигурационного файла:
const path = require('path');
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
devServer: {
static: './dist'
}
};
Запуск:
npx webpack serve
Файл:
import H from '@here/maps-api-for-javascript';
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
const layers = platform.createDefaultLayers();
const map = new H.Map(
document.getElementById('map'),
layers.vector.normal.map,
{
center: {
lat: 40.7128,
lng: -74.0060
},
zoom: 11
}
);
Webpack включит библиотеку в итоговый пакет:
bundle.js
Браузеру больше не потребуется отдельно загружать несколько внешних файлов API.
Установка:
npm install @here/maps-api-for-javascript
Компонент карты:
import { useEffect, useRef } from 'react';
import H from '@here/maps-api-for-javascript';
export default function HereMap() {
const mapRef = useRef(null);
useEffect(() => {
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
const layers = platform.createDefaultLayers();
const map = new H.Map(
mapRef.current,
layers.vector.normal.map,
{
center: {
lat: 51.5074,
lng: -0.1278
},
zoom: 12
}
);
return () => {
map.dispose();
};
}, []);
return (
<div
ref={mapRef}
style={{
width: '100%',
height: '500px'
}}
/>
);
}
Особое внимание следует уделять очистке ресурсов через:
map.dispose();
Это предотвращает утечки памяти после удаления компонента.
Пример компонента:
<template>
<div ref="mapContainer" class="map"></div>
</template>
<script setup>
import { ref, onMounted, onUnmounted } from 'vue';
import H from '@here/maps-api-for-javascript';
const mapContainer = ref(null);
let map;
onMounted(() => {
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
const layers = platform.createDefaultLayers();
map = new H.Map(
mapContainer.value,
layers.vector.normal.map,
{
zoom: 10,
center: {
lat: 52.52,
lng: 13.405
}
}
);
});
onUnmounted(() => {
map.dispose();
});
</script>
<style>
.map {
width: 100%;
height: 500px;
}
</style>
Установка:
npm install @here/maps-api-for-javascript
Компонент:
import { Component, ElementRef, ViewChild, AfterViewInit } from '@angular/core';
import H from '@here/maps-api-for-javascript';
@Component({
selector: 'app-map',
template: '<div #mapContainer></div>'
})
export class MapComponent implements AfterViewInit {
@ViewChild('mapContainer')
mapElement!: ElementRef;
ngAfterViewInit() {
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
const layers = platform.createDefaultLayers();
new H.Map(
this.mapElement.nativeElement,
layers.vector.normal.map,
{
zoom: 13,
center: {
lat: 35.6762,
lng: 139.6503
}
}
);
}
}
Инициализация выполняется после создания DOM-элемента карты.
Жёсткое указание ключа внутри исходного кода считается плохой практикой.
Пример файла:
.env
Содержимое:
VITE_HERE_API_KEY=your_key
Использование в Vite:
const platform = new H.service.Platform({
apikey: import.meta.env.VITE_HERE_API_KEY
});
Для Webpack часто используется пакет:
npm install dotenv
Загрузка переменных:
require('dotenv').config();
Использование:
process.env.HERE_API_KEY
Такой подход облегчает перенос проекта между различными средами разработки.
Современные сборщики способны удалять неиспользуемый код.
Преимущества:
Для корректной работы оптимизации рекомендуется:
Пример production-сборки в Vite:
npm run build
Пример для Webpack:
npx webpack --mode production
Карты часто являются тяжёлым модулем, который не требуется загружать сразу после открытия приложения.
Для уменьшения первоначального объёма загрузки применяется динамический импорт.
const H = await import(
'@here/maps-api-for-javascript'
);
Ленивая загрузка карты:
async function initMap() {
const module = await import(
'@here/maps-api-for-javascript'
);
const H = module.default;
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
}
В этом случае код HERE Maps попадёт в отдельный чанк и будет загружаться только при необходимости.
Сообщение:
Module not found
Причины:
Решение:
npm install
или
npm install @here/maps-api-for-javascript
Распространённые причины:
Проверка контейнера:
#map {
height: 500px;
}
Иногда возникает при использовании дополнительных сервисов платформы.
Проверяются:
В режиме разработки карта работает, а после production-сборки перестаёт отображаться.
Наиболее частые причины:
Для диагностики используются инструменты разработчика браузера и анализ итогового бандла.
Для крупных приложений рекомендуется выделять работу с HERE Maps в отдельные модули.
Пример структуры:
src/
│
├── maps/
│ ├── here.js
│ ├── markers.js
│ ├── routing.js
│ ├── geocoding.js
│ └── layers.js
│
├── components/
│
├── services/
│
└── app.js
Файл инициализации платформы:
import H from '@here/maps-api-for-javascript';
export const platform =
new H.service.Platform({
apikey: import.meta.env.VITE_HERE_API_KEY
});
Повторное использование:
import { platform } from './maps/here';
Подобная организация облегчает сопровождение проекта, масштабирование функциональности картографического приложения и интеграцию HERE Maps API в сложные современные JavaScript-системы, построенные на базе npm и модульных сборщиков.