Я использую ArcGIS JSAPI 4.12 и хочу использовать Пространственные иллюзии для рисования военных символов на карте.

Когда я добавляю milsymbol.js в скрипт, консоль возвращает ошибку Uncaught SyntaxError: Cannot use import statement outside a module , поэтому я добавляю type="module" в скрипт, он возвращает Uncaught ReferenceError: ms is not defined .

Вот мой код:

 {amp}lt;link rel="stylesheet" href="https://js.arcgis.com/4.12/esri/css/main.css"{amp}gt; {amp}lt;script src="https://js.arcgis.com/4.12/"{amp}gt;{amp}lt;/script{amp}gt; {amp}lt;script type="module" src="milsymbol-2.0.0/src/milsymbol.js"{amp}gt;{amp}lt;/script{amp}gt; {amp}lt;script{amp}gt; require([ "esri/Map", "esri/views/MapView", "esri/layers/MapImageLayer", "esri/layers/FeatureLayer" ], function (Map, MapView, MapImageLayer, FeatureLayer) { var symbol = new ms.Symbol("SFG-UCI----D", { size: 30 }).asCanvas(3); var map = new Map({ basemap: "topo-vector" }); var view = new MapView({ container: "viewDiv", map: map, center: [121, 23], zoom: 7 }); }); {amp}lt;/script{amp}gt; 

Итак, добавляю ли я type="module" или нет, всегда есть ошибки. Однако в официальном документе Spatial Illusions в сценарии нет type="module" . Я сейчас действительно растерялся, как им удается заставить его работать без добавления типа?

milsymbol.js

 import { ms } from "./ms.js"; import Symbol from "./ms/symbol.js"; ms.Symbol = Symbol; export { ms }; 

Похоже, что причина ошибок:

1) В настоящее время вы загружаете исходный файл в каталог src а не встраиваемый файл в каталоге dist (вы можете увидеть, что это за предполагаемый распределенный файл). Это означает, что вы используете собственный исходный код в неизмененном / развернутом состоянии, что приводит к следующей ошибке: Uncaught SyntaxError: Cannot use import statement outside a module . Это должно быть исправлено путем использования версии в комплекте, поскольку пакет использует накопительный пакет для создания пакета.

2) Причина, по которой вы получаете ошибку Uncaught ReferenceError: ms is not defined заключается в том, что модули ограничены областью, и поскольку вы загружаете библиотеку с использованием собственных модулей, ms не находится в глобальной области видимости и поэтому недоступна в следующих тег сценария.

Похоже, вы должны иметь возможность загрузить dist версию этого файла, чтобы в window определена ms . Посмотрите этот пример у автора библиотеки, чтобы увидеть пример того, как это можно сделать.

Я получил эту ошибку, потому что я забыл type = «module» внутри тега script:

 {amp}lt;script type="module" src="milsymbol-2.0.0/src/milsymbol.js"{amp}gt;{amp}lt;/script{amp}gt; 

Ошибка возникает из-за того, что файл, на который вы ссылаетесь в html-файле, является версией этого пакета. Чтобы получить полную версию, вам нужно установить ее с помощью npm :

 npm install --save milsymbol 

Это загрузит полный пакет в вашу папку node_modules . Затем вы можете получить доступ к автономному уменьшенному файлу JS адресу node_modules/milsymbol/dist/milsymbol.js

Вы можете сделать это в любом каталоге, а затем просто скопировать приведенный ниже файл в ваш каталог /src .