Ответ 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.