Я следил за Учебное пособие по стеку PERN с YouTube, и у меня начались проблемы с использованием функции require в файле индекса для моего серверного приложения, работающего под управлением Node v 17.7.2 с Express 4.17.
Код, который выдает ошибки, находится здесь:
const express = require("express");
const app = express();
const cors = require("cors");
const routes = require("./routes/jwtAuth")
app.use(express.json());
app.use(cors());
app.use('/auth', myRoutes);
app.get('/', (req, res) =>{
res.send('hello world!');
});
app.listen(process.env.PORT, ()=>
console.info('listening at port 3000'),
);
Ошибка, которую я получаю:
const express = require("express");
^
ReferenceError: require is not defined in ES module scope, you can use import instead
This file is being treated as an ES module because it has a '.js' file extension and '/Users/Nizz0k/Sites/pgpengapi/package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.
Из того, что я читал, эта ошибка раньше ограничивалась использованием require()
в коде внешнего интерфейса, но после Node v14 может возникать и в серверных скриптах. У меня установлен тип module
. Ошибка кажется относительно недавней, так как до сих пор у меня не было никаких сбоев при использовании require
в приложении.
Когда вы используете модули ES (т. е. когда вы устанавливаете тип на module
), вам нужно использовать синтаксис import
:
import express from 'express';
вниз по кроличьей норе рефакторинга, но это сработало.
Если у вас
"type"
установлено на"module"
, как подтверждает ошибка, вы действительно не можете использоватьrequire
. Вы действительно хотеть используете модули ES для своего серверного кода? Если это так, обратите внимание, что модули ES используютimport
. Также обратите внимание, что это не синтаксически недопустимо, это просто вызов функции, а ошибка времени выполнения, потому что эта функция не существует в модуле.