> For the complete documentation index, see [llms.txt](https://reloaderlev.gitbook.io/russian-goit-node-js-new-program/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://reloaderlev.gitbook.io/russian-goit-node-js-new-program/vstup-v-node.js/modulnaya-sistema-v-node.js.md).

# Модульная система в Node.js

Встроенная модульная система в Node.js - CommonJS.

{% tabs %}
{% tab title="экспорт CommonJS" %}
Для того, чтобы написать экспорт через CommonJS необходимо воспользоватся одной из следующих переменных модуля:

* module.exports
* exports (ссылочная переменная на module.exports)

```
module.exports = {
    a: 1,
};

exports.b = 2;

// ни в коем случае не перезаписывайте переменную exports
// Следующая строка кода не сработает
exports = 5;
```

{% endtab %}

{% tab title="импорт CommonJS" %}
Для того, чтобы написать импорт через CommonJS необходимо воспользоватся переменной модуля `require`:

```
// представим, что у нас есть файл export-test.js, что находится в той
// же директории, что и текущий файл и экспортирует обьект { a: 1 }
const exportTest = require('./export-test.js');

console.log(exportTest.a); // 1
```

{% endtab %}
{% endtabs %}

Альтернативная модульная система - ES6 модули. Включить их использование в Node.js возможно несколькими способами:

* при помощи передачи --experimental-modules аргумента при запуске Node.js-скрипта
* при помощи подключение сторонних библиотек-транспайлеров (таких как esm, babel)
* если вы работаете с Node.js 14 версии и выше - для поддержки ES6 модулей достаточно прописать "type": "module" в package.json

{% tabs %}
{% tab title="експорт ES6" %}

```
// export.js
export default {
    a: 1,
};

export const b = 2;
```

{% endtab %}

{% tab title="импорт ES6" %}

```
// представим, что у нас есть файл export-test.js, что находится в той
// же директории, что и текущий файл и экспортирует обьект { a: 1 }
import exportTest from './export-test.js';

console.log(exportTest.a); // 1
```

{% endtab %}
{% endtabs %}
