Tarayıcıdaki ES6 modülleri: Yakalanmamış SyntaxError: Beklenmeyen belirteç içe aktarma


86

Ben yeniyim ES6 (ECMAScript 6) ve onun kullanmak istiyorum modül sistemini tarayıcıda. ES6'nın Firefox ve Chrome tarafından desteklendiğini okudum, ancak aşağıdaki hatayı alıyorumexport

Uncaught SyntaxError: Unexpected token import

Bir test.html dosyam var

<html>
    <script src="test.js"></script>
<body>
</body>
</html>

ve bir test.js dosyası

'use strict';

class Test {

    static hello() {
        console.log("hello world");
    } 
}

export Test;    

Neden?


ES6 modülleri henüz tarayıcıda desteklenmemektedir. Ayrıca bir modül değil, hala bir komut dosyası yüklüyorsunuz.
Bergi

3
Hala bir komut dosyası ile modül arasındaki farkı anlamıyorum
cdarwin


20
Farkına vardığım önemli kısım, <script type="module"></script>eklediğinizden emin olmaktır, aksi takdirde bu hatayı alırsınız. Kafamı duvara <script>import ... </script>vuruyordum, kromun artık bayraksız ES6 modüllerini desteklediği söylendiğini bilerek yapıyordum , sonra tarayıcıya bunun bir ES6 modülü olduğunu belirtmek için type özniteliğinin gerekli olduğunu fark ettim, onsuz tam olarak elde edersiniz hata.
Emmanuel Mahuni

1
Chrome 68 kullanıyorum, şuradan içe aktar * özelliğini kullandığımızda hala bu hatayı görüyorum
Entegrasyon

Yanıtlar:


66

Birçok modern tarayıcı artık ES6 modüllerini desteklemektedir. Komut dosyalarınızı (uygulamanıza giriş noktası dahil) içe aktardığınız <script type="module" src="...">sürece, onu kullanarak çalışacaktır.

Daha fazla ayrıntı için caniuse.com'a göz atın : https://caniuse.com/#feat=es6-module


53

ES6 Modüllerini Google Chrome Beta (61) / Chrome Canary'de deneyebilirsiniz.

Paul Irish tarafından ToDo MVC'nin Referans Uygulaması - https://paulirish.github.io/es-modules-todomvc/

Temel demom var -

//app.js
import {sum} from './calc.js'

console.log(sum(2,3));
//calc.js
let sum = (a,b) => { return a + b; }

export {sum};
<html> 
    <head>
        <meta charset="utf-8" />
    </head>

    <body>
        <h1>ES6</h1>
        <script src="app.js" type="module"></script>
    </body>

</html>

Umarım yardımcı olur!


33
Doğru ... Farkına vardığım önemli kısım, <script type="module"></script>eklediğinizden emin olmaktır, aksi takdirde bu hatayı alırsınız. Kafamı duvara <script>import ... </script>vuruyordum, kromun artık bayraksız ES6 modüllerini desteklediğinin söylendiğini bilerek yapıyordum , sonra tarayıcıya bunun bir ES6 modülü olduğunu belirtmek için type özniteliğinin gerekli olduğunu fark ettim.
Emmanuel Mahuni

1
{"message": "Yakalanmamış Sözdizimi Hatası : Beklenmeyen simge {", "dosya adı": " stacksnippets.net/js ", "lineno": 24, "colno": 8}
hoogw

4
Yukarıdaki kod pasajınızı çalıştırarak yukarıdaki hatayı aldım, chrome v67 kullanın, neden?
hoogw

@hoogw Stackoverflow, Kod parçacığını otomatik olarak çalıştırdı. Bu kod olduğu gibi çalıştırılamaz. Kodu index.html'ye kopyalamanız ve .js dosyalarını yukarıda gösterildiği gibi ayırmanız ve tarayıcıda denemeniz gerekir!
Roopesh Reddy

Faydalı cevap için teşekkürler. Senin için pasaj koşucusunu kaldırdım. (StackOverflow parçacıklarının birden fazla jskaynağa sahip olamayacağını gördüğüm gibi ).
Mir-İsmaili

25

Maalesef modüller şu anda pek çok tarayıcı tarafından desteklenmiyor.

Bu özellik, şu anda tarayıcılarda yerel olarak uygulanmaya sadece yeni başlıyor. TypeScript ve Babel gibi birçok aktarıcıda ve Rollup ve Webpack gibi paketleyicilerde uygulanır.

MDN'de bulundu


Bu özelliğin bir Sof sorusunda uygulandığını okudum, ancak MDN kaynağı aslında daha güvenilir.
cdarwin

Aşağıdaki bağlantıya göre Chrome 61 içe aktarmayı desteklemelidir - desteklemez. medium.com/dev-channel/…
Marc

4
Komut dosyanıza type = "module" eklemelisiniz.
smohadjer

10

benim için çalışmış ekleyerektype="module" komut dosyasına importbenim MJS ing:

<script type="module">
import * as module from 'https://rawgit.com/abernier/7ce9df53ac9ec00419634ca3f9e3f772/raw/eec68248454e1343e111f464e666afd722a65fe2/mymod.mjs'

console.log(module.default()) // Prints: Hi from the default export!
</script>

Demoyu izleyin: https://codepen.io/abernier/pen/wExQaa

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.