¿Cómo debo importar la biblioteca de milsímbolos de Spatial Illusions a mi página web?

5 minutos de lectura

Avatar de usuario de Jerry Chen
jerry chen

Estoy usando ArcGIS JSAPI 4.12 y deseo usar Ilusiones espaciales dibujar símbolos militares en un mapa.

cuando agrego milsymbol.js al script, la consola devuelve 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, si agrego type="module" o no, siempre hay errores. Sin embargo, en el documento oficial de Spatial Illusions, no hay ninguna type="module" en el guión. Ahora estoy realmente confundido. ¿Cómo se las arreglan para que funcione sin agregar el tipo?

Archivo milsymbol.js

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

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

export { ms };

  • Esta pregunta está en el top 10 de las 21 642 537 preguntas en Stack Overflow en términos de tasa de visualización (presumiblemente de los resultados del motor de búsqueda). Tiene alrededor de 1800 visitas por día durante su vida útil.

    -Peter Mortensen

    5 de septiembre de 2021 a las 11:14


  • @PeterMortensen Probablemente porque el título lo hizo parecer mucho más genérico de lo que realmente es.

    – usuario3840170

    ayer

Avatar de usuario de Emmanuel
emmanuel

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>

  • Horas. Pasé horas tratando de hacer que una importación funcionara. Finalmente me di por vencido durante semanas, volví a eso y ahora tu comentario de 1 línea lo arregló para mí. Gracias.

    – Ryan D.

    25 de enero a las 23:15


  • ¡Tú eres la Divinidad allanando el camino para nosotros, mortales! Otras respuestas realmente me asustaron, ¡pero esto va directo al grano!

    – Martín Melichar

    8 de febrero a las 21:12

  • Gracias por su respuesta, ahora sé que tengo el archivo equivocado. He estado buscando la versión dist del archivo pero sin resultado. ¿Conoces alguna forma de obtener la versión dist? ¡Muchas gracias!

    –Jerry Chen

    3 de octubre de 2019 a las 5:58

  • Está disponible para descargar en npm (npmjs.com/package/milsymbol). Alternativamente, puede compilarlo usted mismo clonando el repositorio y ejecutando uno de los scripts de compilación. Parece que hay un script de compilación de AMD (github.com/spatialillusions/milsymbol/blob/master/…) que debería permitirle require el paquete construido directamente en su código.

    – Kai

    3 de octubre de 2019 a las 6:15

  • Lo descargué a través de npm, ahora tengo un script: <script src="node_modules/milsymbol/dist/milsymbol.js"></script>pero la consola aún regresa Uncaught ReferenceError: ms is not defined. el problema es ms no está definido en el dist/milsymbol.jsse define en src/milsymbol.jspero requiere type="module" y causará un problema de alcance. Hay alguna solución para esto. ¡Muchas gracias!

    –Jerry Chen

    3 de octubre de 2019 a las 6:33

  • ¿Qué pasa si esa es la intención real, haciendo referencia a ella desde /src. Como el autor no planea exponer una propiedad de una clase, por ejemplo …

    – Cristián E.

    18 de enero de 2021 a las 17:20

avatar de usuario de nik s
nik s

Resolví mi caso reemplazando “importar” por “requerir”.

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

  • const {parse} = require('node-html-parser'); trabajó para mi

    – ERecargar

    28 de agosto de 2021 a las 17:36

  • ¿Cuál es la explicación? ¿Por qué funciona esto? Responda editando (cambiando) su respuesta, no aquí en los comentarios (sin “Editar:”, “Actualizar:” o similar; la respuesta debería aparecer como si hubiera sido escrita hoy).

    -Peter Mortensen

    5 sep 2021 a las 11:39

  • El software exacto que me causó este problema en node.

    – Greggory Wiley

    26 oct 2021 a las 15:38

  • la pregunta era sobre el navegador

    – Sergio

    19 de noviembre de 2021 a las 0:01

  • Esta respuesta es útil en NodeJs si desea mantener la vieja escuela. Pero no está relacionado con la pregunta.

    – Michel El Hajj

    2 de marzo de 2022 a las 10:01

Hay varias formas comunes de resolver el conflicto asociado con el problema anterior


1. Lo primero: En el guión, incluir type=module

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

2. El segundo: en node.js, en su package.json archivo

    {
       
        "type": "module",
       
    }

reiniciar el proyecto npm start


3. El tercero: reemplazar la importación por requerida

Try this

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

Else try this

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

  • const {parse} = require('node-html-parser'); trabajó para mi

    – ERecargar

    28 de agosto de 2021 a las 17:36

  • ¿Cuál es la explicación? ¿Por qué funciona esto? Responda editando (cambiando) su respuesta, no aquí en los comentarios (sin “Editar:”, “Actualizar:” o similar; la respuesta debería aparecer como si hubiera sido escrita hoy).

    -Peter Mortensen

    5 sep 2021 a las 11:39

  • El software exacto que me causó este problema en node.

    – Greggory Wiley

    26 oct 2021 a las 15:38

  • la pregunta era sobre el navegador

    – Sergio

    19 de noviembre de 2021 a las 0:01

  • Esta respuesta es útil en NodeJs si desea mantener la vieja escuela. Pero no está relacionado con la pregunta.

    – Michel El Hajj

    2 de marzo de 2022 a las 10:01

Avatar de usuario de Peter Mortensen
Pedro Mortensen

También me enfrentaba al mismo problema hasta que agregué type=”module” al script.

Antes era así

<script src="https://stackoverflow.com/questions/58211880/src/main.js"></script>

Y después de cambiarlo a

<script type="module" src="https://stackoverflow.com/questions/58211880/src/main.js"></script>

Funcionó perfectamente.

  • Obtener CORS para hacer esto

    – Shreyan Mehta

    20 de junio de 2020 a las 22:18

  • Lo que significa que está solicitando desde otro dominio. Puedes arreglar eso agregando Access-Control-Allow-Origin: * en sus encabezados. Puede consultar los documentos de MDN sobre CORS en desarrollador.mozilla.org/en-US/docs/Web/HTTP/….

    – Deseo Kaleba

    21 de junio de 2020 a las 8:26


  • no, sé sobre cors, la cuestión es que estos son mis archivos locales

    – Shreyan Mehta

    23 de junio de 2020 a las 19:10

  • Debe servir su secuencia de comandos en un servidor http, los navegadores usan una solicitud http para cargar módulos es6, el servidor debe responder en el encabezado un CORS que permita su origen.

    – danilo

    8 de julio de 2020 a las 1:22

  • la forma más sencilla: puede usar el servidor http: stackoverflow.com/a/23122981/935330

    – danilo

    8 de julio de 2020 a las 1:39

¿Ha sido útil esta solución?