Разница между export const foo, export default foo и module.exports = foo

Я действительно смущен:

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

Я знаю, что они очень простые, но кто-то может продифференцироваться и объяснять это мне. Я действительно хочу понять.

Ответы

Ответ 1

Возьмем каждый из них один за другим.

экспорт 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 модуля в переменную named localFoo. Второй импортирует свойство foo модуля в переменную с именем foo.


экспорт по умолчанию

export default foo

Это также синтаксис ES6 и говорит, что вы также хотите экспортировать значение переменной foo и вы хотите, чтобы это было default экспорта по default поэтому, если кто-то импортирует только модуль, а не какие-либо свойства модуля, это переменная, которую они будут получить. Вы можете иметь только один экспорт по default каждого модуля.

По умолчанию экспорт по умолчанию - это просто именованный экспорт со специальным назначением по default:

import localVar from 'myLib';

Это получит экспорт по default из myLib и присвойте ему значение локально объявленной переменной с именем localVar. Вышеприведенное является сокращением для этого:

import { default as localVar } from 'lib';

Таким образом, экспорт по default просто позволяет вам импортировать ярлык для одного конкретного экспорта. Синтаксис импорта/экспорта ES6 был разработан, чтобы сделать синтаксис максимально кратким для импорта/экспорта по умолчанию. Но по очевидным причинам для каждого модуля есть только одно свойство по умолчанию.


module.exports

// inside of myModule
module.exports = foo;

Это синтаксис node.js для экспорта значения переменной foo и вы экспортируете его на верхнем уровне. Когда кто-то использует этот модуль:

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

Это не синтаксис ES6, а регулярный ES5-совместимый синтаксис с использованием module.exports и require() встроенной в node.js.

Ответ 2

Оператор экспорта используется для экспорта функций, объектов или примитивов из заданного файла (или модуля).


Именованный экспорт Это именованный экспорт в 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')

Для получения дополнительной информации

Ответ 3

export const foo: экспорт констант (ES6) экспорт по умолчанию foo: экспорт объекта (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