Сегодня я начал писать новый проект на 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';