Сегодня я начал писать новый проект на Node.js и при первом же запуске получил ошибку:
const express = require('express');
^
ReferenceError: require is not defined
at ModuleJob.run (node:internal/modules/esm/module_job:152:23)
at async Loader.import (node:internal/modules/esm/loader:166:24)
at async Object.loadESM (node:internal/process/esm_loader:68:5)
Первым делом я проверил установленную версию Node.js:
node -v
Тут проблем не было
v15.5.1
Выглядело это довольно странно и раньше в серверных приложениях я такой ошибкой не сталкивался.
Быстрый поиск на stackoverflow нашел несколько тем, в которых говорят, что require не работает в браузере и советуют использовать webpack или browserify.
Еще несколько минут и я нашел то, что мне было нужно. Похоже, что в версиях Node.js 14+ ошибка ReferenceError: require is not defined может встречаться и на сервере.
Проблема в том, что в файле package.json была такая строка:
"type": "module",
С ее помощью активируется подключение npm модулей через ключевое слово import.
Решение
Чтобы избавиться от ошибки require is not defined в Node.js можно сделать 3 вещи:
-
изменить тип модулей в
package.jsonнаcommonjs:"type": "commonjs" -
удалить строку
"type": "module"из файлаpackage.json -
изменить тип подключения модулей на
import:// const express = require('express'); import express from 'express';