Polymer 3 использует импорт для загрузки внешнего Javascript. Например
import {GoogleCharts} from 'google-charts';
Однако, чтобы это работало, внешняя библиотека должна использовать экспорт.
Я пытаюсь использовать библиотеку mapbox-gl.js. Эта библиотека, установленная с помощью:
npm install mapbox-gl
вроде ничего не экспортирует.
В HTML5 вы можете использовать mapbox-gl следующим образом:
<script src="node_modules/mapbox-gl/dist/mapbox-gl.js"></script>
<link href="node_modules/mapbox-gl/dist/mapbox-gl.css" rel="stylesheet" />
<script>
const options = {...}
const map = new mapboxgl.Map(options);
</script>
Я попытался использовать «импорт» для загрузки mapbox-gl:
import {mapboxgl} from './node_modules/mapbox-gl/dist/mapbox-gl.js';
import mapboxgl from './node_modules/mapbox-gl/dist/mapbox-gl.js';
Это не работает:
Uncaught SyntaxError: The requested module './node_modules/mapbox-gl/dist/mapbox-gl.js' does not provide an export named 'mapboxgl'
Uncaught SyntaxError: The requested module './node_modules/mapbox-gl/dist/mapbox-gl.js' does not provide an export named 'default'
Итак, затем я попытался добавить скрипт и css в document.head изнутри модуля javascript (<script type="module">..</script>
):
// load external mapbox-gl.js script
const mapboxgljs = document.createElement('script');
mapboxgljs.setAttribute('src', 'node_modules/mapbox-gl/dist/mapbox-gl.js');
document.head.appendChild(mapboxgljs);
// load external mapbox-gl.css
const mapboxcss = document.createElement('link');
mapboxcss.setAttribute('href', 'node_modules/mapbox-gl/dist/mapbox-gl.css');
mapboxcss.setAttribute('rel', 'stylesheet');
document.head.appendChild(mapboxcss);
Это тоже не работает. Если я попытаюсь использовать mapbox следующим образом:
const map = new mapboxgl.Map(options)
Я получаю:
Uncaught ReferenceError: mapboxgl is not defined
Изменить:
Комментаторы @Salketer и @barbsan показали правильный синтаксис импорта для такой библиотеки:
import 'node_modules/mapbox-gl/dist/mapbox-gl.js';
or
import * as mapboxgl from 'node_modules/mapbox-gl/dist/mapbox-gl.js';
Оба теперь приводят к следующему сообщению об ошибке:
Uncaught TypeError: Cannot set property 'mapboxgl' of undefined
Это означает, что библиотека mapbox-gl теперь загружается и интерпретируется. Однако код mapbox-gl содержит строку:
window.mapboxgl = something;
Область модуля ES6 не имеет доступа к объекту «окно» браузера, поэтому код не работает. См. также Есть ли область модуля es6, эквивалентная `window` ?.
Сейчас я добавляю теги HTML5 ‹script›‹/script› и ‹link /› (см. выше) в index.html моего проекта. Это работает, но идея компонентов и модулей заключается в том, чтобы загружать зависимости изнутри этих компонентов и модулей?
import * as mapboxgl from ...
? - person barbsan   schedule 03.08.2018import 'module.js'
, иimport * as mapboxgl from 'module.js'
, кажется, делают что-то большее. Однако теперь импорт выдает Uncaught TypeErrorCannot set property 'mapboxgl' of undefined
. Кажется, это происходит внутри библиотеки с выражениемwindow.mapboxgl = ...
. Глобальный объектwindow
недоступен в области модуля E6, поэтому мне, вероятно, следует сдаться и подождать, пока библиотека mapbox-gl будет поддерживать модули ES6? См. также stackoverflow.com/questions/32961255/ - person anneb   schedule 03.08.2018