我正在使用ArcGIS JSAPI 4.12,希望使用空间幻象在地图上绘制军事符号。

当我将milsymbol.js添加到脚本中时,控制台返回错误

无法在模块外部使用import语句

所以我添加type="module"到脚本中,然后它返回

Uncaught ReferenceError: ms未定义

这是我的代码:

<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",总会有错误。但是在Spatial Illusions的官方文档中,脚本中没有type="module"。我现在真的很困惑。他们如何在不添加类型的情况下让它工作呢?

文件milsymbol.js

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

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

export { ms };

当前回答

有几种常见的方法可以解决与上述问题相关的冲突


1. 第一个:在脚本中,包含type=module

    <script type="module" src="milsymbol-2.0.0/src/milsymbol.js"></script>

2. 第二种:在node.js中,放入你的包中。json文件

    {
       
        "type": "module",
       
    }

重新启动项目npm start


3.第三:按要求替换导入

试试这个

import { parse } from 'node-html-parser';
parse = require('node-html-parser');

否则试试这个

//import { parse } from 'node-html-parser';
parse = require('node-html-parser');

其他回答

错误的原因如下:

You're currently loading the source file in the src directory instead of the built file in the dist directory (you can see what the intended distributed file is here). This means that you're using the native source code in an unaltered/unbundled state, leading to the following error: Uncaught SyntaxError: Cannot use import statement outside a module. This should be fixed by using the bundled version since the package is using rollup to create a bundle. The reason you're getting the Uncaught ReferenceError: ms is not defined error is because modules are scoped, and since you're loading the library using native modules, ms is not in the global scope and is therefore not accessible in the following script tag.

看起来你应该能够加载这个文件的dist版本,在窗口上定义ms。请查看库作者提供的这个示例,以了解如何做到这一点。

有几种常见的方法可以解决与上述问题相关的冲突


1. 第一个:在脚本中,包含type=module

    <script type="module" src="milsymbol-2.0.0/src/milsymbol.js"></script>

2. 第二种:在node.js中,放入你的包中。json文件

    {
       
        "type": "module",
       
    }

重新启动项目npm start


3.第三:按要求替换导入

试试这个

import { parse } from 'node-html-parser';
parse = require('node-html-parser');

否则试试这个

//import { parse } from 'node-html-parser';
parse = require('node-html-parser');

更新Node.js / NPM

在你的包中添加"type": "module"。json文件。

{
  // ...
  "type": "module",
  // ...
}

注意:当使用模块时,如果你没有定义ReferenceError: require,你将需要使用import语法而不是require。您不能在它们之间进行混合和匹配,因此您需要选择其中之一,如果需要使用两者,则使用捆绑器。

我把“import”替换为“require”,解决了这个问题。

// import { parse } from 'node-html-parser';
const parse = require('node-html-parser');

我在尝试使用import Express.js时遇到了这个错误。

而不是从'express'进口express;

我使用const express = require('express');