Webpack/typescript/react — ошибка: неожиданный токен React.Component

Я пытаюсь настроить проект с помощью webpack, typescript и реагировать. Я использую babel для переноса моего кода typescript/react. При запуске сервера разработки я получаю следующую ошибку:

Module parse failed: Unexpected token (4:6)
You may need an appropriate loader to handle this file type.
| 
| export class App extends React.Component {
>   arr = [1, 2, 3];
| 
|   render() {

Babel не может обработать объявление массива? Мне это кажется немного странным. Кроме того, потому что мой класс реакции выглядит иначе:

app.tsx

export class App extends React.Component {

    public arr: number[] = [1, 2, 3];

    public render(): React.ReactNode {
       ...
    }
}

export default App;

Я пока пытаюсь предотвратить файл .babelrc или babel.config.js и пытаюсь решить его с помощью webpack.config.js:

webpack.config.js

По соображениям ясности я вырезал большую часть ненужных конфигураций:

module.exports = (env) => {

    const isProduction = env.production === true;
    const isDevelopment = env.development === true;

    return {
        entry: {
            main: srcDir + '/index.tsx'
        },
        ...
        module: {
            rules: [
                {
                    oneOf: [
                       {
                        test: /\.(js|mjs|jsx|ts|tsx)$/,
                        include: srcDir,
                        loader: 'babel-loader',
                        options: {
                            babelrc: false,
                            configFile: false,
                            presets: [
                                ["@babel/preset-react"],
                                ["@babel/preset-typescript"]
                            ],
                            plugins: [
                                [
                                    'babel-plugin-named-asset-import',
                                    {
                                        loaderMap: {
                                            svg: {
                                                ReactComponent: '@svgr/webpack?-svgo,+ref![path]',
                                            },
                                        },
                                    },
                                ],
                            ],
                            cacheDirectory: true,
                            cacheCompression: isProduction,
                            compact: isProduction,
                        },
                    },
                       ...
                    ]
                }
            ]

        },
        ...
    };
};

пакет.json

Листинги задействованных пакетов выглядят так:

 ...
  "devDependencies": {
    "@babel/core": "^7.4.0",
    "@svgr/webpack": "^4.1.0",
    "babel-loader": "^8.0.5",
    "babel-plugin-named-asset-import": "^0.3.1",
    "@babel/preset-react": "^7.0.0",
    "@babel/preset-typescript": "^7.3.3",
    "webpack": "^4.29.6",
    "webpack-cli": "^3.3.0"
  },
  "dependencies": {
    "@types/react": "^16.8.12",
    "@types/react-dom": "^16.8.3",
    "@types/react-router-dom": "^4.3.1",
    "react": "^16.8.6",
    "react-dom": "^16.8.6"
  }

Возможно, у некоторых из вас есть решение, как предотвратить эту проблему с помощью правильной конфигурации. :)

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
706
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, это не связано с машинописным текстом или синтаксическим анализом реакции, я полагаю, вам не хватает следующего плагина Babel: https://babeljs.io/docs/en/babel-plugin-proposal-class-properties

Этот плагин позволяет Babel правильно анализировать свойства класса, такие как ваш массив.

Чтобы установить его npm install --save-dev @babel/plugin-proposal-class-properties

а затем добавьте его в конфигурацию загрузчика babel в списке плагинов.

plugins: [
      "@babel/plugin-proposal-class-properties",
      [
        'babel-plugin-named-asset-import',
        {
          loaderMap: {
             svg: {
                ReactComponent: '@svgr/webpack?-svgo,+ref![path]',
             },
          },
        },
      ],
 ]

Другие вопросы по теме