Рубрики
Без рубрики

Экспорт узла модуля объяснена – с примерами экспорта экспорта JavaScript

Одним из самых мощных вещей о разработке программного обеспечения является возможность повторно использовать и опираться на основы других людей. Этот совместное использование кода помогло прогрессу программного обеспечения при удивительной ставке. Такой замечательный механизм имеет решающее значение на микроуровне для индивидуальных проектов, так и для групп. Для узла.

Автор оригинала: Stanley Nguyen.

Одним из самых мощных вещей о разработке программного обеспечения является возможность повторно использовать и опираться на основы других людей. Этот совместное использование кода помогло прогрессу программного обеспечения при удивительной ставке.

Такой замечательный механизм имеет решающее значение на микроуровне для индивидуальных проектов, так и для групп.

Для Node.js этот процесс совместного использования кода – как в пределах отдельных проектов, так и во внешних зависимостях NPM – это облегчает использование Module.exports или экспорт .

Как мы используем экспорт модуля, чтобы подключить внешний модуль или разумно сломать наш проект в несколько файлов (модулей)?

Система модуля Node.js была создана, потому что его дизайнеры не хотели, чтобы она страдала от одной и той же проблемы сломанной глобальной области, например, его коллега браузера. Они реализовали Спецификация Commonjs для достижения этой цели.

Две важные части головоломки Module.exports и требуется функция.

Как работает Module.exports

Module.exports на самом деле является собственностью модуль объект. Вот как модуль Объект выглядит как когда мы console.log (модуль) :

Module {
  id: '.',
  path: '/Users/stanleynguyen/Documents/Projects/blog.stanleynguyen.me',
  exports: {},
  parent: null,
  filename: '/Users/stanleynguyen/Documents/Projects/blog.stanleynguyen.me/index.js',
  loaded: false,
  children: [],
  paths: [
    '/Users/stanleynguyen/Documents/Projects/blog.stanleynguyen.me/node_modules',
    '/Users/stanleynguyen/Documents/Projects/node_modules',
    '/Users/stanleynguyen/Documents/node_modules',
    '/Users/stanleynguyen/node_modules',
    '/Users/node_modules',
    '/node_modules'
  ]
}

Вышеуказанный объект в основном описывает инкапсулированный модуль из файла JS с помощью Module.exports Будучи экспортируемым компонентом любых типов – объект, функция, строка и т. Д. Экспорт по умолчанию в модуле Node.js так же просто, как это:

module.exports = function anExportedFunc() {
  return "yup simple as that";
};

Есть еще один способ экспорта из модуля Node.js, называемый «названный экспорт». Вместо того, чтобы присвоение целого Module.exports К ценности мы будем назначать отдельные свойства по умолчанию Module.exports объект к значениям. Что-то вроде этого:

module.exports.anExportedFunc = () => {};
module.exports.anExportedString = "this string is exported";

// or bundled together in an object
module.exports = {
  anExportedFunc,
  anExportedString,
};

Названный экспорт также может быть сделан более кратко с модулем Экспорт Предопределенная переменная, как это:

exports.anExportedFunc = () => {};
exports.anExportedString = "this string is exported";

Однако присвоение целого Экспорт Переменная к новой ценности не будет работать (мы обсудим почему в более позднем разделе), и часто смущает разработчиков Node.js.

// This wont work as we would expect
exports = {
  anExportedFunc,
  anExportedString,
};

Представьте себе, что экспорт модуля Node.js – это транспортные контейнеры, с Module.exports и Экспорт Как персонал порта, которого мы бы сказали, какой «корабль» (то есть ценности), которые мы хотим добраться до «зарубежного порта» (другой модуль в проекте).

Ну, «экспорт по умолчанию» будет рассказывать Module.exports Какой «корабль» устанавливает парус, в то время как «названный экспорт» будет загружать разные контейнеры на корабль, который Module.exports собирается установить парус.

Теперь, когда мы отправили корабли парусника, как наши «зарубежные порты» катушки на экспортируемом корабле?

Как работает node.js

На приемном конце Node.js модули могут импортировать по требовать -Напортированное значение.

Допустим, это было написано в Ship.js :

...
module.exports = {
  containerA,
  containerB,
};

Мы можем легко импортировать «корабль» в нашем Получение-порт.js :

// importing the whole ship as a single variable
const ship = require("./ship.js");
console.log(ship.containerA);
console.log(ship.containerB);
// or directly importing containers through object destructuring
const { containerA, containerB } = require("./ship.js");
console.log(containerA);
console.log(containerB);

Важный момент для заметок об этом операторе иностранного порта – требуется – Это то, что человек непреклонен к получению кораблей, которые были Отправлено Module.exports С другой стороны моря Отказ Это приводит нас к следующему разделу, где мы рассмотрим общую пункт путаницы.

Module.exports VS Exports – какая разница, а которую вы используете, когда?

Теперь, когда мы прошли основные основы экспортировки модуля и требования, пришло время обратиться к одному из общих источников путаницы в модулях Node.js.

Это общий модуль экспортирует ошибку, что люди, которые начинают с Node.js, часто делают. Они назначают Экспорт к новой ценности, думая, что это так же, как «экспорт по умолчанию» через Module.exports Отказ

Однако это не будет работать, потому что:

  • требуется будет использовать только значение из модуль. Экспорты
  • Экспорт Является ли изменяемая модулем переменной, которая относится к Module.exports изначально

Так что путем назначения Экспорт к новой ценности, мы эффективно указываем на значение Экспорт к другой ссылке от первоначальной ссылки на тот же объект, что и Module.exports Отказ

Если вы хотите узнать больше об этом техническом объяснении, Официальная документация Node.js это хорошее место для начала.

Вернуться к аналогии, которую мы сделали ранее с помощью кораблей и операторов: Экспорт другой персонал порта, который мы могли бы сообщить об исходящем корабле. В начале, оба Module.exports и Экспорт иметь такую же информацию о исходящем «корабле».

Но что, если мы скажем Экспорт что исходящий корабль будет другим (то есть назначение экспорт в совершенно новое значение)? Тогда, что бы мы ни говорим им позже (например, присвоение свойств Экспорт ценностям) не будет на корабле, что Module.exports на самом деле устанавливает парус, который будет получен требуется Отказ

С другой стороны, если мы только скажем Экспорт Чтобы «загрузить контейнеры на исходящий корабль» (присвоение свойств Экспорт значение), мы фактически в конечном итоге загрузка «контейнеров» (то есть значение свойства) на корабль, который на самом деле устанавливает парус.

На основании распространенной ошибки, описанной выше, мы, безусловно, мы могли определенно развивать некоторые хорошие соглашения вокруг использования модулей Commonjs в Node.js.

Node.js Экспорт лучших практик – разумная стратегия

Конечно, Конвенция, предложенная ниже, полностью из моих собственных оценок и рассуждений. Если у вас есть более сильный случай для альтернативы, пожалуйста, не стесняйтесь твитнуть мне @stanley_ngn Отказ

Основными вещами, которые я хочу достичь с этой конвенцией:

  • Устранение путаницы вокруг Экспорт против модуль. Экспорты
  • Простота чтения и более высокая гамма умышленность в отношении модуля экспорт

Поэтому я предлагаю, чтобы мы консолидировали экспортированные значения в нижней части файла, как это:

// default export
module.exports = function defaultExportedFunction() {};
// named export
module.exports = {
  something,
  anotherThing,
};

Это уничтожило бы какие-либо недостатки с точки зрения краткости, что Module.exports по сравнению с сокращением экспорт . Это удалит все стимулы для нас, чтобы использовать запутанные и потенциально вредные Экспорт Отказ

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

Выходя за пределы Commonjs

Есть новый, а лучше (конечно!) Стандарт, который недавно был представлен на Node.js называется Модули Ecmascript Отказ Модули Ecmascript Используется только в коде, который в конечном итоге потребуется транспитация из Бабел или как часть экспериментальной функции в Node.js версии 12 или старше.

Это довольно простой и элегантный способ обращения с экспортером модуля. Гист его можно суммировать с экспортом по умолчанию:

export default function exportedFunction() {}

а также Именный экспорт выглядит так:

// named exports on separate LOC
export const constantString = "CONSTANT_STRING";
export const constantNumber = 5;
// consolidated named exports
export default {
  constantString,
  constantNumber,
};

Затем эти значения могут легко импортироваться на приемную, как это:

// default exported value
import exportedFunction from "exporting-module.js";
// import named exported values through object destructuring
import { constantString, constantNumber } from "exporting-module.js";

Это приводит к не более путанице от Module.exports против Экспорт И хороший человеческий синтаксис!

Есть определенно проекты, которые еще предстоит перенести на Node.js версии 14 и выше, и поэтому не может использовать этот новый синтаксис.

Однако, если у вас есть шанс (потому что вы начинаете новый проект, или ваш проект успешно мигрировал на Node.js 14 и выше), нет причин не переходить на этот удивительный футуристический способ сделать вещи.

Спасибо за чтение!

Последнее, но не менее важное, если вам нравятся мои писания, пожалуйста, отправляйтесь на мой блог Для похожих комментариев и следуйте я в твиттере Отказ 🎉

Оригинал: “https://www.freecodecamp.org/news/node-module-exports-explained-with-javascript-export-function-examples/”