#javascript #build #commonjs #openlayers-6
Вопрос:
При работе с openlayers я использую простой дистрибутив JS (без модулей), используя
<script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.9.0/build/ol.js">
или локальную копию ol.js и отлаживайте по желанию в моем локальном браузере.
Когда все работает с такими объявлениями, как
var map = new ol.Map({ ...});
var mySource = new ol.source.Vector();
etc ...
Я хотел бы иметь возможность построить custom-ol.js меньше, чем ol.js содержит только то, что я использую.
Я попробовал другой подход, но без особого успеха. Установка среды разработки в узле с помощью простого main.js импорт только того, что мне нужно, показался хорошим решением:
import {Map, View} from 'ol';
import Vector from 'ol/layer/Vector';
...
Однако при построении с узлом, как описано в https://openlayers.org/en/latest/doc/tutorials/bundle.html, Используя множество предлагаемых вариантов (Vite, веб-пакет, накопительный пакет и т. Д.), Я сталкиваюсь с одной из этих двух проблем:
- Либо custom-ol.js построен как модуль, и локальное развитие больше невозможно
- Или custom-ol.js построен как обычный файл JS, без модулей, но у меня не может быть синтаксиса, подобного ol.source.Вектор() работает
Я также пытался создавать Openlayers из исходного кода с помощью «npm run build-legacy», но пытаться угадать, какой источник следует исключить, громоздко.
Я действительно скучаю по хорошему учебнику по ручному созданию минимальной пользовательской библиотеки Openlayers, сохраняя при этом объявления в стиле ol.xxx.yyy.
Ответ №1:
У меня было немного свободного времени, и я действительно хорошо изучил Javascript. Тем не менее, использование модулей при разработке небольшого веб-сайта все еще является для меня немного излишним, по крайней мере, на данный момент.
Итак, вот что я сделал, чтобы получить меньший ol.js библиотека:
- Вилочные открывалки
- Установите зависимости с помощью
npm install
- Построить index.js с
npm run build-index
- Отредактируйте
./build/index.js
, чтобы прокомментировать ненужный экспорт
//~ import $ol$source$Raster from './ol/source/Raster.js';
import $ol$source$Source from './ol/source/Source.js';
//~ import $ol$source$Stamen from './ol/source/Stamen.js';
import $ol$source$Tile from './ol/source/Tile.js';
...
//~ ol.source.Raster = $ol$source$Raster;
//~ ol.source.Raster.Processor = _ol_source_Raster$Processor;
//~ ol.source.Raster.RasterSourceEvent = _ol_source_Raster$RasterSourceEvent;
//~ ol.source.Raster.newImageData = _ol_source_Raster$newImageData;
ol.source.Source = $ol$source$Source;
//~ ol.source.Stamen = $ol$source$Stamen;
ol.source.Tile = $ol$source$Tile;
...
Это немного утомительно, но эффективно.
- Создайте наследие ol.js плоский файл с
npx webpack --config config/webpack-config-legacy-build.mjs amp;amp; npx cleancss --source-map src/ol/ol.css -o build/legacy/ol.css
Только за счет удаления форматов и источников, которые я не использую, а также векторных плиток и webgl, ol.js
объем уменьшается с 1,2 МБ до 540 КБ.