export const foo,export default foo和module.exports = foo之间的区别

时间:2017-02-25 20:38:05

标签: javascript node.js

我真的很困惑:

  1. export const foo
  2. export default foo
  3. module.exports = foo;
  4. 我知道这些是非常基本的,但有人可以区分并向我解释这些。我真的很想了解。

3 个答案:

答案 0 :(得分:27)

让我们逐一进行。

导出const

 export const foo

这是命名导出的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语法,而是使用node.js中内置的module.exportsrequire()基础结构的常规ES5兼容语法。

答案 1 :(得分:2)

  

export语句用于从给定文件(或模块)导出函数,对象或基元。

命名导出 这是ES6 javascript中的命名导出

export const foo

导入如:

import { foo } from 'path'

默认导出 这是默认导出(可以使用任何名称导入)

export default foo

导入如下:

import bar from 'path'

这是在nodejs程序中使用的commonjs export。

module.exports = foo;

导入如:

var foo = require('path')

more详细信息

答案 2 :(得分:0)

export const foo:导出常量(ES6) export default foo:exports object(ES6)

以上陈述是ECMA Script 2015(又名ES6)实施。

在普通的ES6 JS文件中,可以导出任何对象(变量)或常量。请注意,您不能更改常量引用,但内部结构可以修改(奇怪)。

在ES6中,可以在模块(脚本文件)中有多个导出。可以在调用脚本中添加

import {Obj1, Obj2} from module_file

即将导出默认值,模块中只能有一个导出默认值。当导入未定义确切名称时,默认值已被选中。

module.exports = foo;是较旧的实现,它与导出默认值相同。除了使用require语句而不是import

导入

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