2016-02-11 81 views
9

論ES6使用導入導出,我發現了以下錯誤:ES2015模塊進出口語法錯誤

SyntaxError: export declarations may only appear at top level

我上網找到如何解決這個問題,但即時通訊無法。任何人都可以解釋這一點。 Im新的ES6,特別是進口和出口。 (我完全用這種東西來使用StealJS) 謝謝!

js文件是:

app.js

import { cube, cubeRoot } from 'functions'; 

console.log(cube(4)); 
console.log(cubeRoot(125)); 

functions.js

// functions.js 

function cube(a) { 
    return a * a * a; 
} 

function cubeRoot(a) { 
    return Math.cbrt(a); 
} 

export { cube, cubeRoot} 
+3

是'functions'文件或模塊?也許你需要從'。/ functions''導入{...}? –

+0

你確定你沒有一些流浪無敵的開放大括號嗎?這是你的確切代碼嗎?你能告訴我們確切的設置,以及你如何處理這個問題? – Bergi

+0

這是整個錯誤消息嗎?有任何行號或左右? – Bergi

回答

5

更新2017年夏:

http://caniuse.com/#search=modules,新的支持,也許需要改變設置。

現在,事情不太模糊。要使模塊工作,您必須告訴瀏覽器它是一個模塊(另一個是腳本)。第一種方法是隱式的,導入的模塊總是一個模塊。第二個方法是用型模塊<script src="anymodule.js" type="module"></script>

確保進口和出口都只能在頂級,而不是一個塊內,沒有內部的if語句,而不是一個循環中,等

還要確保到提供的完整路徑(包括.js文件),它應該./../啓動。假設文件位於同一個文件夾中,它將是import { cube, cubeRoot } from './functions.js';

eval對模塊字符串不起作用。

過時下面的回答:

的ES2015模塊進出口語法不是由我寫這個答案(04/2016)時間的任何瀏覽器的支持。該錯誤信息未命中,因爲它意味着語法被支持,但它根本不被支持。看到這裏https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import

的第一個音符的原因是因爲模塊裝載機規範仍然處於進展中的工作。見https://whatwg.github.io/loader/#status

他們的工具然而,填充工具或自動transpile這句法像通天塔。

+0

瀏覽器中缺少的模塊功能不會導致OP報告的錯誤消息。 –

+0

錯誤確實導致錯過 –

+2

我在說,如果瀏覽器不支持模塊,它根本不會生成該消息。它會產生一個消息,比如'Unexpected token import'。因此,OP的問題在於別處。 –