JavaScript экспорт против модуля. Экспорт в NodeJS - PullRequest
0 голосов
/ 09 апреля 2020

Может кто-нибудь помочь мне понять разницу между javascript экспортом класса / функции и module.exports в node JS и почему существует два способа экспорта javascript атрибутов и функций и когда использовать какой экспорт. Также возможно ли использовать оба экспорта вместе?

export function getUsers() {
    return users
}

VS

module.exports = {
  getUsers: function () {
    return users
  }
}

1 Ответ

0 голосов
/ 10 апреля 2020

Я думаю, что ответ на ваш вопрос таков: ключевое слово export в JavaScript является встроенной функцией JavaScript в ECMAScript 6+ и всегда может быть использовано. module.exports в Node.js указывает c на Node.js сам по себе и не будет работать, если вы использовали его в любом скрипте , отличном от , чем приложение узла.

Что касается того, когда использовать, какой, если вы пишете приложение узла, используйте module.exports. Почему? Node.js не поддерживает все функции ECMAScript 6 и более поздних версий, а ключевое слово export выдаст ошибку. то есть

//This throws a syntax error in node.js
export function makeSillyName(firstName, lastName) {
   const sillyName = `Hi, Mister ${firstName} Mc${lastName}pants!`;
   return sillyName;
};

//This is the error that it throws:
//export function makeSillyName(firstName, lastName) {
//^^^^^^
//
//SyntaxError: Unexpected token 'export'
//    at wrapSafe (internal/modules/cjs/loader.js:1072:16)
//    at Module._compile (internal/modules/cjs/loader.js:1122:27)
//    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
//    at Module.load (internal/modules/cjs/loader.js:1002:32)
//    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
//    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)

Но это не так:

//Doesn't throw an error
function makeSillyName(firstName, lastName) {
   const sillyName = `Hi, Mister ${firstName} Mc${lastName}pants!`;
   return sillyName;
}

module.exports = {
   makeSillyName
};

Существует способ использования ключевого слова export, но он немного сложнее. Вот ссылка: https://www.freecodecamp.org/news/how-to-enable-es6-and-beyond-syntax-with-node-and-express-68d3e11fe1ab/

Итак, подведем итог: ключевое слово export является функцией ECMAScript 6+ и не может использоваться в Node.js. Функция module.exports работает в Node.js, но не работает во всех других «оригинальных» JavaScript средах.

Надеюсь, это поможет!

...