“Yakalanmamış SyntaxError: ECMAScript 6 içe aktarılırken modül dışında import ifadesi kullanılamıyor”


92

ArcGIS JSAPI 4.12 kullanıyorum ve bir harita üzerinde askeri semboller çizmek için Mekansal Yanılsamalar kullanmak istiyorum .

milsymbol.jsKomut dosyasına eklediğimde , konsol hata döndürüyor

Yakalanmamış SyntaxError: İçe aktarma ifadesi bir modül dışında kullanılamaz`

bu yüzden type="module"betiğe ekliyorum ve sonra geri dönüyor

Yakalanmayan ReferenceError: ms tanımlı değil

İşte benim kod:

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

Bu yüzden, eklesem de eklemesem type="module"de, daima hatalar vardır. Ancak, Mekansal İllüzyonların resmi belgesinde type="module", senaryoda herhangi bir şey yoktur . Şimdi gerçekten kafam karıştı. Türü eklemeden çalışmasını nasıl sağlarlar?

Milsymbol.js dosyası

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

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

export { ms };

1
Bir modülü almaya çalışırken aynı hatayı alıyorum! Herhangi bir çözüm var mı?
Zeeshan Ahmad Khalil

Şimdi hangi yoluyla kullanarak herhangi bir modül içerebilir browserify kullanıyorum require(). Bu videoyu izleyin
Zeeshan Ahmad Khalil

Yanıtlar:


62

Ben komut dosyası etiketi içinde type = "module" unuttum çünkü bu hatayı aldım:

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

51

Hataların nedeni şöyledir:

1) Şu anda kaynak dosyayı srcdizindeki yerleşik dosya yerine dizine yüklüyorsunuz dist( burada amaçlanan dağıtılmış dosyanın ne olduğunu görebilirsiniz ). Eğer, bir değiştirilmemiş / ayrıştırılmış durumda yerli kaynak kodunu kullanarak aşağıdaki hata yol açan olduğunuzu Bu araçlar: Uncaught SyntaxError: Cannot use import statement outside a module. Paket bir paket oluşturmak için toplaması kullandığından, bu, paketlenmiş sürüm kullanılarak düzeltilmelidir .

2) Uncaught ReferenceError: ms is not definedHatayı almanızın nedeni , modüllerin kapsamlı olması ve kitaplığı yerel modüller kullanarak yüklediğiniz msiçin genel kapsamda olmaması ve bu nedenle aşağıdaki komut dosyası etiketinde erişilebilir olmamasıdır.

distBu dosyanın msüzerinde tanımlanmış olan sürümünü yükleyebilmeniz gerekir window. Check out Bu örneği bu nasıl yapılabileceği bir örneğini görmek için kütüphane yazarın.


Cevabınız için teşekkür ederim, şimdi yanlış dosyaya sahip olduğumu biliyorum. Dosyanın dist sürümünü arıyordum ama sonuç yok. Dist sürümünü almanın herhangi bir yolunu biliyor musunuz? Çok teşekkürler!
Jerry Chen

Npm ( npmjs.com/package/milsymbol ) adresinden indirilebilir . Alternatif olarak, repoyu klonlayıp yapı komut dosyalarından birini çalıştırarak kendiniz de oluşturabilirsiniz. Dahili pakete doğrudan kodunuza girmenizi sağlayan bir AMD derleme betiği ( github.com/spatialillusions/milsymbol/blob/master/… ) var gibi görünüyor require.
Kai

1
Ben npm üzerinden indirdim, şimdi script var:, <script src="node_modules/milsymbol/dist/milsymbol.js"></script>ama konsol hala dönüyor Uncaught ReferenceError: ms is not defined. Sorun, msiçinde tanımlanmadı, içinde dist/milsymbol.jstanımlandı src/milsymbol.js, ancak type="module"kapsam sorununu gerektiriyor ve neden olacak. Bunun için herhangi bir çözüm var mı. Çok teşekkürler!
Jerry Chen

6

Bu sorunu aşağıdakileri yaparak çözdüm:

Tarayıcıdan ECMAScript 6 modüllerini kullanırken, dosyalarınızda ve add komut dosyası etiketinde .js uzantısını kullanın type = "module".

Node.js ortamından ECMAScript 6 modüllerini kullanırken, .mjsdosyalarınızdaki uzantıyı kullanın ve dosyayı çalıştırmak için bu komutu kullanın:

node --experimental-modules filename.mjs

5

Betiğe type = "module" ekleyene kadar aynı sorunla karşı karşıya kaldım. Daha önce böyle değildi

<script src="../src/main.js"></script>

Ve değiştirdikten sonra

<script type="module" src="../src/main.js"></script>

Mükemmel çalıştı


1

HTML dosyanızda bağlandığınız dosya dosyanın ayrıştırılmamış sürümü olduğundan hata tetiklenir. Paketin tam sürümünü edinmek için aşağıdakileri yüklemeniz gerekir npm:

npm install --save milsymbol

Bu, tam paketi node_modulesklasörünüze indirir .

Ardından, bağımsız küçültülmüş JavaScript dosyasına şu adresten erişebilirsiniz: node_modules/milsymbol/dist/milsymbol.js

Bunu herhangi bir dizinde yapabilir ve aşağıdaki dosyayı /srcdizininize kopyalayabilirsiniz .



0

Src .packiçindeki <script>etikette ad ve uzantı arasına ekleme yapmanız yeterlidir. yani:

<script src="name.pack.js">
// code here
</script>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.