Ошибка: преобразование свойств отсутствующего класса

Error: Missing class properties transform

Test.js:

export class Test extends Component {
  constructor (props) {
    super(props)
  }

  static contextTypes = {
    router: React.PropTypes.object.isRequired
  }

.babelrc:

{
  "presets": ["es2015", "react", "stage-0"],
  "plugins": ["transform-class-properties"]
}

package.json:

"babel-core": "^6.5.1",
"babel-eslint": "^4.1.8",
"babel-loader": "^6.2.2",
"babel-plugin-react-transform": "^2.0.0",
"babel-plugin-transform-class-properties": "^6.5.2",
"babel-preset-es2015": "^6.5.0",
"babel-preset-react": "^6.5.0",
"babel-preset-stage-0": "^6.5.0",
"babel-register": "^6.5.2",

Я прошерстил Интернет, и все исправления вращаются вокруг: Обновление до babel6, изменение порядка «стадии-0» после «es2015». Все, что я сделал.


person speak    schedule 19.02.2016    source источник


Ответы (12)


Вам необходимо установить babel-plugin-transform-class-properties:

npm install babel-plugin-transform-class-properties --save-dev

or

yarn add babel-plugin-transform-class-properties --dev

и добавьте следующее в файл конфигурации Babel — обычно .babelrc или babel.config.js.

"plugins": ["@babel/plugin-proposal-class-properties"],
person neeraj-dixit27    schedule 29.03.2018
comment
А с новым пакетом вот так должен выглядеть раздел плагинов: plugins: ['@babel/plugin-proposal-class-properties'] - person Sebastian; 09.07.2020

ОК, наконец-то понял это, в моем webpack.config.js у меня было:

module: {
    loaders: [
      {
        test: /\.js?$/,
        exclude: /(node_modules|bower_components)/,
        loaders: [
          'react-hot',
          'babel?presets[]=react,presets[]=es2015,presets[]=stage-0'
        ]
      }
    ]
  }

'babel?presets[]=stage-0,presets[]=react,presets[]=es2015'

Должен обрабатываться так же, как .babelrc, переключил stage-0 на после es2015, и он отлично компилируется.

person speak    schedule 20.02.2016
comment
Вам не нужны оба. Если у вас есть .babelrc, вы можете отключить все параметры загрузчика. - person loganfsmyth; 20.02.2016
comment
Вы просто решили свою проблему, настроив файл webpack.config.js? Я столкнулся с той же проблемой, но я использую браузер и не могу избавиться от него. - person lenny.myr; 03.06.2016
comment
Я использую браузер и использую этот порядок es2015, реагирую, у меня сработал этап-0. Я положил конфиг в .babelrc. - person lipp; 04.07.2016
comment
Привет @speak, отличная находка. Но я предлагаю вам записать правильный конфиг в этом ответе, потому что я сначала был изменен на ваш неправильный конфиг -_- - person YuC; 13.07.2016
comment
@lenny.myr вам нужно установить babeljs.io/docs/plugins/preset-stage -0, если вы используете браузер. А затем в обновлении задачи gulp преобразуйте в .transform('babelify', {presets: ['es2015', 'react','stage-0']}) - person rex; 16.10.2016
comment
Я использую браузер и обновляю порядок es2015, react, stage-0 в .bablerc. Пожалуйста, убедитесь, что в package.json browersify.transform.presets указан тот же порядок, ИЛИ в этом отношении его можно полностью удалить, если для браузера требуется другой перевод. - person Vineet Kapoor; 27.08.2017

На всякий случай, если кто-то все еще сталкивается с той же проблемой, мне помог следующий пост в блоге: https://devblogs.microsoft.com/typescript/typescript-and-babel-7/

В моем случае (babel 7.9.6, typescript 3.9.2, webpack 4.43.0) мне пришлось сделать следующее:

  1. Выполните следующую команду:

    npm install --save-dev @babel/preset-typescript @babel/preset-env @babel/plugin-proposal-class-properties @babel/plugin-proposal-object-rest-spread
    
  2. Создайте файл .babelrc (да, у меня его раньше не было, и он отлично работал) со следующим содержимым:

    {
        "presets": [
            "@babel/env",
            "@babel/preset-typescript"
        ],
        "plugins": [
            "@babel/proposal-class-properties",
            "@babel/proposal-object-rest-spread"
        ]
    }
    
person Anatolyevich    schedule 14.05.2020

У меня была такая же ошибка, и я правильно заказал свои плагины в своем .babelrc, но она все еще сохранялась. Удаление предустановленных параметров, которые я определил в своем загрузчике веб-пакета, исправило это.

Бывшая конфигурация веб-пакета:

module: {
  rules: [
    {
      test: /.jsx?$/,
      loader: 'babel-loader',
      include: path.join(__dirname, 'src'),
      exclude: /node_modules/,
      query: {
        presets: ['es2015', 'react']
      }
    }
  ]
}

Рабочий конфиг вебпака:

module: {
  rules: [
    {
      test: /.jsx?$/,
      loader: 'babel-loader',
      include: path.join(__dirname, 'src'),
      exclude: /node_modules/
    }
  ]
}
person Vanessa Ejikeme    schedule 22.10.2018

Я столкнулся с этой проблемой, когда не задумываясь поместил некоторые функции со стрелками в один из своих классов. Как только я изменил функции стрелок на обычные определения функций/методов, ошибка была устранена.

person vancy-pants    schedule 23.06.2020
comment
При работе с WebComponents и библиотекой lit-element это помогло. - person tonkatata; 03.09.2020
comment
Возможно, стоит рассмотреть это исправление, если вы не собирались включать стрелочные функции в качестве свойств класса, поскольку они имеют некоторые существенные недостатки после переноса в ES2017. См. medium.com/@charpeni/ - person BenHohner; 23.11.2020

У меня была эта ошибка, потому что я использовал stage-3 вместо stage-0.

person Ben    schedule 04.12.2017

Исправление в моем случае заключалось в определении плагина 'transform-class-properties' в атрибуте options моего webpack.config.js, я использую babel V6.

 rules:[
    .....,
    {
       test: /\.(js|jsx)$/,
       exclude: /(node_modules|bower_components)/,
       loader: 'babel-loader',
       options: { plugins: ['transform-class-properties']}
    }
 ]
person JimmyFlash    schedule 13.05.2019

Я также встречаю эту ошибку из-за использования пресетов env: "presets": [ "react", "es2015", "stage-0", ["env", { "modules": false }]], и после того, как я удаляю пресеты env, все работает хорошо

person Creem    schedule 30.01.2018

@speak правильно, но вам нужно изменить порядок

loaders: [
  'react-hot',
  'babel?presets[]=react,presets[]=es2015,presets[]=stage-0'
]

person Montage    schedule 20.06.2016

Я столкнулся с той же проблемой, используя koa-react-view. Вдохновитесь этими ответами и, наконец, исправьте это с помощью следующего кода в koa server.js:

const register = require('babel-register');

register({
    presets: ['es2015', 'react', 'stage-0'],
    extensions: ['.jsx']
});

person Jeff Tian    schedule 08.02.2018

Наконец обнаружено, чтобы удалить эту ошибку в проекте Laravel-Mix, добавьте приведенный ниже код в webpack.mix.js

mix.webpackConfig({
        module: {
            rules: [
                {
                    test: /\.js?$/,
                    exclude: /(node_modules|bower_components)/,
                    loaders: [
                        'babel-loader?presets[]=react,presets[]=es2015,presets[]=stage-0'
                    ]
                }
            ],
        }
});
person Muhammad Sulman    schedule 19.09.2018

Если вы используете Babel 7.4 или новее, @babel/pollify не рекомендуется.

Установите пакеты core-js, regenerator-runtime, @babel/plugin-proposal-class-properties и babel-plugin-transform-class-properties.

yarn add core-js regenerator-runtime @babel/plugin-proposal-class-properties babel-plugin-transform-class-properties --dev
// or
npm install core-js regenerator-runtime @babel/plugin-proposal-class-properties babel-plugin-transform-class-properties --save-dev

Затем добавьте к .babelrc или babel.config.js

"plugins": ["@babel/plugin-proposal-class-properties"],

Наконец, добавьте эти строки в свой основной файл js:

import "core-js/stable";
import "regenerator-runtime/runtime";

Взято из: https://stackoverflow.com/a/54490329/9481448

person Juan Aguillón    schedule 29.04.2021