Ошибка ссылки: модуль не определен

#javascript #node.js #reactjs #syntax-error #node-modules

#javascript #node.js #reactjs #синтаксическая ошибка #узел-модули

Вопрос:

Итак, я пытался запустить это веб-приложение, и сначала оно показало

(узел: 12960) Предупреждение: чтобы загрузить модуль ES, установите «type»: «module» в package.json или используйте расширение .mjs.
C:UsersJreact-messengerstream-chat-boilerplate-apisrcindex.js:1 импортировать dotenv из ‘dotenv’; ^^^
^^^

Ошибка синтаксиса: невозможно использовать оператор импорта вне модуля

А затем я пошел, чтобы установить тип: module в package.json, но это выдало мне эту ошибку

Ошибка ссылки: модуль не определен

 at file:///C:/Users/J/react-messenger/stream-chat-boilerplate-api/src/index.js:38:1
  

Вот мой код:

 import dotenv from 'dotenv';
dotenv.config();

import fs from 'fs';
import path from 'path';
import express from 'express';
import bodyParser from 'body-parser';
import cors from 'cors';
import helmet from 'helmet';
import compression from 'compression';

const api = express();

api.use(cors());
api.use(compression());
api.use(helmet());
api.use(bodyParser.urlencoded({ extended: true }));
api.use(bodyParser.json());

api.listen(process.env.PORT, error => {
    if (error) {
        console.warn(error);
        process.exit(1);
    }

    // eslint-disable-next-line array-callback-return
    fs.readdirSync(path.join(__dirname, 'routes')).map(file => {
        require('./routes/'   file)(api);
    });

    console.info(
        `Running on port ${process.env.PORT} in ${
            process.env.NODE_ENV
        } mode. 🚀`
    );
});

module.exports = api;

  

Я не знаю, что я делаю не так

Комментарии:

1. Как говорится: установите «тип»: «модуль» в package.json или используйте расширение .mjs.

Ответ №1:

Вы смешиваете импорт ES с CommonJS — в нижней части файла, который у вас есть module.exports = api; , это терминология CJS. Эквивалент модуля ES равен:

 export default api
  

Комментарии:

1. Могу ли я использовать require модуль cjs в файле .mjs с помощью инструкции import

2. @Gary да, ты можешь.

3. Это прямой ответ, который мне был нужен!

4. Нашел свое решение с этим ответом! Спасибо.