«Uncaught SyntaxError: Невозможно использовать оператор импорта вне модуля» при импорте ES6 - PullRequest
18 голосов
/ 03 октября 2019

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

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

Вот мой код:

<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>

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

milsymbol.js

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

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

export { ms };

Ответы [ 4 ]

9 голосов
/ 03 октября 2019

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

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

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

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

2 голосов
/ 03 ноября 2019

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

<script type="module" src="milsymbol-2.0.0/src/milsymbol.js"></script>
0 голосов
/ 06 ноября 2019

Я столкнулся с подобной проблемой с узлом в Windows, используя Cygwin. Оказывается, хотя в сообщении об ошибке указано «1001 *», моя проблема была связана с длинными путями.

Чтобы обойти эту проблему, мне пришлось

  1. создать временный диск в этом месте subst I: YourProjectdir
  2. Перейти к этому замещенному диску cd I:
  3. Перезапустить команду узла снова node Yourfile.js
0 голосов
/ 04 ноября 2019

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

npm install --save milsymbol

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

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

...