Ошибка: Не удается найти модуль ‘babel-preset-react’ — Если вы хотите разрешить «реагировать», используйте «модуль:реагировать»

#reactjs #webpack #babeljs

Вопрос:

Я рассмотрел все вопросы SO, касающиеся этой проблемы, и до сих пор мне не удалось решить эту проблему.

Я следую курсу Pluralsight по React, и пример приложения создается вручную с нуля; это означает, что каждая зависимость добавляется вручную без использования какого-либо интерфейса командной строки. Поскольку курс несколько устарел, мне пришлось потратить довольно много времени на обновление большинства пакетов babel, пока я не столкнулся с этой проблемой при запуске webpack.

Это список зависимостей от пакета.json

      "babel": {
       "presets": [
         "react",
         "env",
         "stage-2"
       ]
      },
      "dependencies": {
        "@babel/cli": "^7.14.3",
        "@babel/core": "^7.14.3",
        "@babel/preset-env": "^7.14.4",
        "@babel/preset-react": "^7.13.13",
        "@babel/preset-stage-2": "^7.8.3",
        "babel-loader": "^8.2.2",
        "ejs": "^3.1.6",
        "express": "^4.17.1",
        "nodemon": "^2.0.7",
        "react": "^17.0.2",
        "react-dom": "^17.0.2",
        "webpack": "^5.38.1"
      },
      "devDependencies": {
        "babel-eslint": "^10.1.0",
        "eslint": "^7.27.0",
        "eslint-plugin-react": "^7.24.0",
        "webpack-cli": "^4.7.0"
      }
 

И это то, что webpack.config.js

 const path = require('path');

module.exports = {
    entry: './lib/components/app.jsx',
    output: {
        path: path.resolve(__dirname, 'public'),
        filename: 'bundle.js',
    },
    module: {
        rules: [
            { 
                test: /.(js|jsx)$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: [
                            ['@babel/preset-env', { targets: 'defaults' }],
                            '@babel/preset-react'
                        ]
                    }
                }
            }
        ],
    },
    devtool: 'source-map',
};
 

I am running the command «webpack -w».

Most answers in SO talk about correctly configuring the «presets» in the webpack.config.js file. So far I have tried several things with the exact same result:

 presets: [
    ['@babel/preset-env', { targets: 'defaults' }],
    '@babel/preset-react'
]


presets: [
    '@babel/preset-react'
]                       

presets: [
    '@babel/preset-env', 
    '@babel/preset-react'
]
 

The full error I am getting is as follows:

ERROR in ./lib/components/app.jsx Module build failed (from
./node_modules/babel-loader/lib/index.js): Error: Cannot find module
‘babel-preset-react’

  • If you want to resolve «react», use «module:react»
  • Вы имели в виду «@babel/реагировать»? на работе.Модуль._resolveFilename (внутренний/модули/cjs/загрузчик.js:636:15) при разрешении (C:UserssromeroDocumentsLearningReactadvanced-reactnode_modulesv8-compile-cachev8-compile-cache.js:164:23) при разрешении стандартного имени (C:UserssromeroDocumentsLearningReactadvanced-reactnode_modules@babelcorelibconfigfilesplugins.js:111:7) при разрешении (C:UserssromeroDocumentsLearningReactadvanced-reactnode_modules@babelcorelibconfigfilesplugins.js:59:10) при загрузке (C:UserssromeroDocumentsLearningReactadvanced-reactnode_modules@babelcorelibconfigfilesplugins.js:78:20) в loadPreset.next () в createDescriptor (C:UserssromeroDocumentsLearningReactadvanced-reactnode_modules@babelcorelibconfigconfig-descriptors.js:187:16) в createDescriptor.далее () на шаге (C:UserssromeroDocumentsLearningReactadvanced-reactnode_modulesgensyncindex.js:261:32) в evaluateAsync (C:UserssromeroDocumentsLearningReactadvanced-reactnode_modulesgensyncindex.js:291:5)

И для полноты картины, файл app.jsx, на который ссылается ошибка, — это:

 import React from 'react';
import ReactDOM from 'react-dom';

const App = () => {
    return (
        <h2>I am working!</h2>
    );
};

ReactDOM.render(
    <App />,
    document.getElementById('root')
);
 

Любая помощь будет признательна.

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

1. Что происходит, когда вы удаляете @babel/preset-react из webpack.config.js раздела настроек файла?

2. @WillWalsh — Тот же результат.

3. Когда вы говорите «каждая зависимость добавляется вручную без использования какого-либо интерфейса командной строки», что вы имеете в виду? У вас есть файл .babelrc? Вы уверены, что пробовали с just presets: [ '@babel/preset-env' ] ? Это не один из вариантов, которые вы показываете в посте как попробовавшие.

4. @WillWalsh — Под «добавлением их вручную» я подразумеваю, что каждый из них добавляется с помощью «установки npm». Просто для дополнительной уверенности я просто попробовал еще раз и подтвердил, что получил тот же результат с вариантом, который вы предлагаете.

5. Извините. Я больше ничем не могу помочь. Я нахожу, что попытка подробно использовать настройки среды из старых учебных пособий может быть сопряжена с отладкой, поскольку пакеты так часто меняются. Если вы не используете те же версии пакетов, что и они, все может быть по-другому. Лично при изучении новых фреймворков/библиотек я настраиваю проект, используя детали из текущей документации, гарантирую, что он работает чисто, а затем использую код из старых учебников без частей пакета, корректируя его по мере необходимости. Обычно это облегчает процесс обучения, позволяя избежать проблем, связанных с изменением версии пакета.

Ответ №1:

babel Ключ в вашем package.json файле предназначен для Вавилона 6.x и ссылается на плагины, которые вы не установили, поэтому вы получаете эту ошибку.

@babel/preset-env и @babel/preset-react , скорее всего, выполнит все, о чем вам нужно беспокоиться, поэтому, пока они установлены и указаны в конфигурации Webpack, вы можете идти.