Как подключить модуль в Node.js?

Ответ

В Node.js существует две основные системы модулей: CommonJS (стандартная, историческая) и ES Modules (современная). Способ подключения зависит от используемой системы.

1. CommonJS (использует require()): Это классический способ, используемый по умолчанию в файлах с расширением .js или .cjs.

// Подключение встроенного (core) модуля
const fs = require('fs');

// Подключение стороннего модуля из node_modules
const express = require('express');
const { Model } = require('sequelize'); // Деструктуризация

// Подключение локального файла
const myUtility = require('./utils/myUtility');
const config = require('../config'); // Ищет config.js или config/index.js

2. ES Modules (использует import/export): Чтобы использовать ES Modules, нужно либо указать "type": "module" в package.json, либо использовать расширение .mjs для файлов.

// package.json: { "type": "module" }

// Подключение встроенного модуля (может потребовать префикс 'node:')
import fs from 'fs/promises';
import { createServer } from 'node:http';

// Подключение стороннего модуля
import express from 'express';
import { Router } from 'express';

// Подключение локального файла
import { helperFunc } from './lib/helpers.js'; // Расширение .js обязательно

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

Ответ 18+ 🔞

А, ну это же классика, ёпта! Сидишь ты такой, пишешь код, и тут — бац! — нужно модуль какой-то подключить. А способов-то, оказывается, не один, а целых два, и они друг друга, мягко говоря, не очень любят. Как будто два кота в одном мешке, только один с винтом.

1. CommonJS (старый добрый require()): Это, бля, классика жанра. Как дедовский москвич — громыхает, бензина жрёт дохуя, но зато едет и все его понимают. Работает в обычных .js файлах по умолчанию. Всё просто: хочешь что-то — require() его в рот мне чих-пых.

// Берёшь встроенную фигню из коробки
const fs = require('fs');

// Тянешь какую-то левую библиотеку из node_modules
const express = require('express');
const { Model } = require('sequelize'); // Вытащил только нужную часть — хитрая жопа!

// Или свой, родной, файлик рядом
const myUtility = require('./utils/myUtility');
const config = require('../config'); // Он сам догадается найти config.js или залезть в index.js

Вот и вся магия. Никаких танцев с бубном.

2. ES Modules (модный import/export): А это уже новое веяние, современное. Чтобы это чудо заработало, надо либо в package.json прописать "type": "module", либо файлы называть .mjs. Иначе Node.js на тебя посмотрит как на идиота и скажет «чё?».

// Предположим, в package.json уже стоит "type": "module"

// Берёшь встроенный модуль (иногда лучше с префиксом 'node:' писать, чтоб наверняка)
import fs from 'fs/promises';
import { createServer } from 'node:http';

// Тащишь стороннюю библиотеку
import express from 'express';
import { Router } from 'express';

// Подключаешь свой файл (и тут ОБЯЗАТЕЛЬНО расширение .js указывай, иначе овердохуища ошибок будет!)
import { helperFunc } from './lib/helpers.js';

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