javascript - "Nicht erfasster Syntaxfehler: Die import-Anweisung kann nicht außerhalb eines Moduls verwendet werden" beim Importieren von ES6



ecmascript-6 arcgis (1)

Ich verwende ArcGIS JSAPI 4.12 und möchte Spatial Illusions verwenden, um militärische Symbole auf der Karte zu zeichnen.

Wenn ich milsymbol.js zum Skript hinzufüge, gibt die Konsole den Fehler Uncaught SyntaxError: Cannot use import statement outside a module milsymbol.js füge milsymbol.js dem Skript type="module" Es wird Uncaught ReferenceError: ms is not defined .

Hier ist mein Code:

<link rel="stylesheet" href="https://js.arcgis.com/4.12/esri/css/main.css">
<script src="https://js.arcgis.com/4.12/"></script>
<script type="module" src="milsymbol-2.0.0/src/milsymbol.js"></script>

<script>
        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
            });
        });
    </script>

Also, ob ich type="module" hinzufüge oder nicht, es gibt immer Fehler. Im offiziellen Dokument von Spatial Illusions gibt es jedoch kein type="module" im Skript. Ich bin jetzt wirklich verwirrt, wie schaffen sie es, dass es funktioniert, ohne den Typ hinzuzufügen?

milsymbol.js

import { ms } from "./ms.js";

import Symbol from "./ms/symbol.js";
ms.Symbol = Symbol;

export { ms };

Es sieht so aus, als ob die Fehlerursache folgende ist:

1) Sie laden derzeit die Quelldatei in das Verzeichnis src anstelle der erstellten Datei in das Verzeichnis dist (hier können Sie die beabsichtigte verteilte Datei here ). Dies bedeutet, dass Sie den nativen Quellcode in einem unveränderten / entbündelten Zustand verwenden, was zu folgendem Fehler führt: Uncaught SyntaxError: Cannot use import statement outside a module . Dies sollte mithilfe der gebündelten Version behoben werden, da das Paket Rollup verwendet , um ein Bundle zu erstellen.

2) Der Grund, warum Sie den Fehler " Uncaught ReferenceError: ms is not defined , liegt darin, dass Module einen Gültigkeitsbereich haben. Da Sie die Bibliothek mit nativen Modulen laden, befindet sich ms nicht im globalen Bereich und ist daher im Folgenden nicht verfügbar Skript-Tag.

Es sieht so aus, als ob Sie in der Lage sein sollten, die dist Version dieser Datei zu laden, um ms im window definieren. Schauen Sie sich dieses Beispiel des Autors der Bibliothek an, um ein Beispiel dafür zu sehen, wie dies geschehen kann.





arcgis-js-api