J'utilise ArcGIS JSAPI 4.12 et je souhaite utiliser des illusions spatiales pour dessiner des symboles militaires sur une carte.
Lorsque j'ajoute milsymbol.js
au script, la console renvoie une erreur
SyntaxError non capturée: impossible d'utiliser l'instruction d'importation en dehors d'un module`
donc j'ajoute type="module"
au script, puis il revient
Uncaught ReferenceError: ms n'est pas défini
Voici mon 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>
Donc, que j'ajoute type="module"
ou non, il y a toujours des erreurs. Cependant, dans le document officiel de Spatial Illusions, il n'y en a pas type="module"
dans le script. Je suis maintenant vraiment confus. Comment parviennent-ils à le faire fonctionner sans ajouter le type?
Fichier milsymbol.js
import { ms } from "./ms.js";
import Symbol from "./ms/symbol.js";
ms.Symbol = Symbol;
export { ms };
javascript
ecmascript-6
arcgis
arcgis-js-api
Jerry Chen
la source
la source
require()
. Découvrez cette vidéoRéponses:
J'ai eu cette erreur car j'ai oublié le type = "module" à l'intérieur de la balise de script:
la source
Il semble que la cause des erreurs soit:
1) Vous chargez actuellement le fichier source dans le
src
répertoire au lieu du fichier construit dans ledist
répertoire (vous pouvez voir quel est le fichier distribué prévu ici ). Cela signifie que vous utilisez le code source natif dans un état / dégroupé, conduisant à l'erreur suivante:Uncaught SyntaxError: Cannot use import statement outside a module
. Cela devrait être résolu en utilisant la version fournie car le package utilise le cumul pour créer un ensemble.2) La raison pour laquelle vous obtenez l'
Uncaught ReferenceError: ms is not defined
erreur est que les modules sont limités et que vous chargez la bibliothèque à l'aide de modules natifs,ms
n'est pas dans la portée globale et n'est donc pas accessible dans la balise de script suivante.Il semble que vous devriez pouvoir charger la
dist
version de ce fichier àms
définir sur lewindow
. Consultez cet exemple de l'auteur de la bibliothèque pour voir un exemple de la façon dont cela peut être fait.la source
require
directement au package intégré dans votre code.<script src="node_modules/milsymbol/dist/milsymbol.js"></script>
mais la console revient toujoursUncaught ReferenceError: ms is not defined
. Le problème n'estms
pas défini dans ledist/milsymbol.js
, il est défini danssrc/milsymbol.js
, mais il nécessitetype="module"
et entraînera un problème de portée. Existe-t-il une solution à ça. Merci beaucoup!J'ai résolu ce problème en procédant comme suit:
Lorsque vous utilisez les modules ECMAScript 6 à partir du navigateur, utilisez l'extension .js dans vos fichiers et dans la balise de script add
type = "module"
.Lorsque vous utilisez des modules ECMAScript 6 à partir d'un environnement Node.js, utilisez l'extension
.mjs
dans vos fichiers et utilisez cette commande pour exécuter le fichier:la source
J'étais également confronté au même problème jusqu'à ce que j'ajoute le type = "module" au script. Avant c'était comme ça
Et après l'avoir changé en
Cela a parfaitement fonctionné
la source
L'erreur est déclenchée car le fichier auquel vous créez un lien dans votre fichier HTML est la version dégroupée du fichier. Pour obtenir la version complète fournie, vous devrez l'installer avec
npm
:Cela télécharge le package complet dans votre
node_modules
dossier.Vous pouvez ensuite accéder au fichier JavaScript minifié autonome à l'adresse
node_modules/milsymbol/dist/milsymbol.js
Vous pouvez le faire dans n'importe quel répertoire, puis copiez simplement le fichier ci-dessous dans votre
/src
répertoire.la source
--save
est par défaut depuisnpm 5
&node 8
(2017): stackoverflow.com/q/36022926/1821548 , nodejs.dev/npm-dependencies-and-devdependencies , github.com/benmosher/eslint-plugin-import/issues/884 , auth0. com / blog / whats-new-in-node8-and-npm5Ajoutez simplement
.pack
entre le nom et l'extension dans la<script>
balise dans src. c'est à dire:la source