Estoy usando ArcGIS JSAPI 4.12 y deseo usar Spatial Illusions para dibujar símbolos militares en un mapa.
Cuando agrego milsymbol.js
al script, la consola devuelve un error
Error de sintaxis no capturado: no se puede usar la declaración de importación fuera de un módulo
entonces agrego type="module"
al script, y luego regresa
Error de referencia no detectado: ms no está definido
Aquí está mi código:
<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>
Entonces, ya sea que agregue type="module"
o no, siempre hay errores. Sin embargo, en el documento oficial de Spatial Illusions, no hay ningún type="module"
en el script. Ahora estoy realmente confundido. ¿Cómo se las arreglan para que funcione sin agregar el tipo?
import { ms } from "./ms.js"; import Symbol from "./ms/symbol.js"; ms.Symbol = Symbol; export { ms };
Recibí este error porque olvidé el type="module"
dentro de la etiqueta del script:
<script type="module" src="milsymbol-2.0.0/src/milsymbol.js"></script>
Agregue "type": "module"
a su archivo package.json
.
{ // ... "type": "module", // ... }
Nota : al usar módulos, si obtiene ReferenceError: require is not defined
, deberá usar la sintaxis de import
en lugar de require
. No puede mezclar y combinar de forma nativa entre ellos, por lo que deberá elegir uno o usar un paquete si necesita usar ambos .
Parece que la causa de los errores son:
Actualmente está cargando el archivo fuente en el directorio src
en lugar del archivo construido en el directorio dist
(puede ver cuál es el archivo distribuido previsto aquí ). Esto significa que está utilizando el código fuente nativo en un estado inalterado/desagregado, lo que genera el siguiente error: Uncaught SyntaxError: Cannot use import statement outside a module
. Esto debería solucionarse usando la versión empaquetada, ya que el paquete usa el paquete acumulativo para crear un paquete.
La razón por la que está obteniendo el Uncaught ReferenceError: ms is not defined
es porque los módulos tienen un alcance, y dado que está cargando la biblioteca usando módulos nativos, ms
no está en el alcance global y, por lo tanto, no es accesible en la siguiente etiqueta de secuencia de comandos .
Parece que debería poder cargar la versión dist
de este archivo para tener ms
definido en la window
. Consulte este ejemplo del autor de la biblioteca para ver un ejemplo de cómo se puede hacer esto.