2016-12-22 51 views
11

爲什麼這項工作:命名出口VS出口對象

const str = 'stuff'; 
export { 
    str 
}; 

但不是這樣的:

export default { 
    str: 'stuff' 
}; 

我想導入爲以下幾點:

import { str } from 'myLib'; 

我想直接在導出中賦值,而不需要事先創建一個變量。

而且當我嘗試:

export { 
    str: 'stuff' 
}; 

我得到的錯誤:

SyntaxError: /home/karlm/dev/project/ex.js: Unexpected token, expected , (41:5) 
    39 | 
    40 | export { 
> 41 | str: 'stuff' 
    | ^
    42 | }; 
    43 | 
+0

這是多麼出口的語法著作。它*看起來像對象解構,我想這就是爲什麼你期望能夠導出一個*對象*,但這兩個概念是根本不同的。相關閱讀:http://stackoverflow.com/questions/33524696/es6-destructuring-and-module-imports – CodingIntrigue

+1

相關類型:[ES6解構和模塊導入](http://stackoverflow.com/q/33524696/218196 ) –

+1

也有關:[Javascript(ES6),導出常量vs導出默認值](http://stackoverflow.com/q/33611812/218196) –

回答

0

export statement的主要原因是用來輸出從給定文件的功能,對象或原語(或模塊)。

但是,您需要一個標識符才能導出(以便可以通過另一個腳本中的import導入)。

你可以簡單地做:

export const obj = { 
    str: 'stuff' 
}; 

import,你將能夠使用相同的名稱obj指相應的值。

並導入它想:

import { obj } from 'myLib'; 
6

有兩種樣式ES6出口 - 「正常」的出口,默認的導出。普通獲得出口導出的語法是這樣的:

export const str = 'stuff'; 
// or 
const str = 'stuff'; 
export {str}; 

默認出口是這樣的:

export default const str = 'stuff'; 
// or 
export default { 
    str: 'stuff' 
}; 

的差異顯示了當您導入。隨着第一,你需要包括括號:

import {str} from 'myModule'; // 'stuff', from the first example 

如果沒有括號,它導入默認的導出:

import myModule from 'myModule'; // {str: 'stuff'}, from the second example 
+0

更新我的問題,關於你的第一部分,我得到一個錯誤。 –

+0

對不起,我的壞。編輯。 – Scimonster