2017-02-25 42 views
6

我真的很困惑:差= foo的

  1. export const foo
  2. export default foo
  3. module.exports = foo;

我知道這些都是非常基本,但有人可以區分和解釋這些給我。我真的很想明白。

+0

看看這個:http://stackoverflow.com/questions/40294870/module-exports-vs-export-default-in-node-js-and-es6 – technophobia

回答

10

讓一個採取這些之一。

出口常量

export const foo 

這是一個名爲export ES6出口語法。您可以有許多命名導出。它表示您想要導出變量foo的值,並且您還在該模塊中聲明該符號爲const

你自己實際上不能使用export const foo,就像你自己可以使用const foo;一樣。相反,你會的東西給它分配:

export const foo = 12; 

const僅適用於模塊內部。它不會影響某人在從另一端的模塊中導入值時可以使用該值的內容,因爲在另一端(導入時),該值會被複制到另一個變量中。如果使用import語句創建了其他變量,那麼無論在導出端聲明瞭什麼,它都會在導入端自動const(不能分配給它)。

這可以導入爲以下任一:

import {foo as localFoo} from 'lib'; 
import {foo} from 'lib'; 

第一進口模塊的foo財產爲localFoo命名變量。 第二個將模塊的foo屬性導入foo命名變量。


出口默認

export default foo 

這也是ES6語法和說,你還想要導出的變量foo的價值,你想這是default出口值,所以如果有人只導入模塊而不導入模塊的任何屬性,這是他們將獲得的變量。每個模塊只能有一個default導出。

內部,默認的出口僅僅是一個名叫出口與分配的特殊名稱default

import localVar from 'myLib'; 

這將讓mylib中的default出口和分配給它的價值,是一個名爲localVar本地聲明的變量。以上是這個的簡寫:

import { default as localVar } from 'lib'; 

因此,default出口只是可以讓你有一個特定出口的快捷方式進口。 ES6導入/導出語法旨在使語法對於默認導入/導出儘可能簡短。但是,由於顯而易見的原因,每個模塊只有一個默認屬性。


module.exports

// inside of myModule 
module.exports = foo; 

這是出口變量foo的價值node.js的語法和你在頂層出口它。當有人使用此模塊:

let x = require('myModule'); 
console.log(x); // will show the value of `foo` from the previous module 

這不是ES6語法,而是使用module.exportsrequire()基礎設施定期ES5兼容的語法建成node.js中

2

export語句用於從給定文件(或模塊)中導出函數,對象或原語。


命名出口 這是ES6命名出口的JavaScript

export const foo 

這是進口同類:

import { foo } from 'path' 

默認的導出 這是一個默認的出口(這可以使用任何名稱導入)

export default foo 

這是進口的,像這樣:

import bar from 'path' 

這是CommonJS的出口,其在使用nodejs程序。

module.exports = foo;

這是進口的,如:

var foo = require('path') 

對於more細節

0

出口常量富:出口常數(ES6) 出口默認富:出口對象(ES6)

以上聲明是ECMA Script 2015(又名ES6)的實施。

在一個正常的ES6 JS文件中,可以導出任何對象(變量)或常量。請注意,您不能更改常量引用,但內部結構可以修改(奇怪)。

在ES6中,模塊(腳本文件)中可以有多個導出。這可以在調用腳本中添加,因爲

import {Obj1, Obj2} from module_file 

即將導出默認值,模塊中只能有一個導出默認值。並且在未定義確切名稱時導入默認值。

module.exports = foo;是較舊的實現,它與導出默認相同。除了它是用進口需要聲明,而不是進口

更多參考https://developer.mozilla.org/en/docs/web/javascript/reference/statements/export

相關問題