"ClassProperties" deneysel sözdizimi desteği şu anda etkin değil


117

Django projesinde React'i kurarken bu hatayla karşılaştım

Modül derlemesindeki ModuleBuildError başarısız oldu (./node_modules/babel-loader/lib/index.js'den): SyntaxError: C: \ Users \ 1Sun \ Cebula3 \ cebula_react \ assets \ js \ index.js: Deneysel sözdizimi 'classProperties için destek şu anda etkin değil (17: 9):

  15 | 
  16 | class BodyPartWrapper extends Component {
> 17 |   state = {
     |         ^
  18 | 
  19 |   }
  20 | 

Add @babel/plugin-proposal-class-properties (https://git.io/vb4SL) to the 
'plugins' section of your Babel config to enable transformation.

Bu yüzden, @ babel / plugin-proposal-class-properties'i kurdum ve bunu babelrc'ye koydum

package.json

{
  "name": "cebula_react",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server --config ./webpack.config.js --mode development",
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config prod.config.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "babel": {
    "presets": [
      "@babel/preset-env",
      "@babel/preset-react"
    ]
  },
  "devDependencies": {
    "@babel/cli": "^7.0.0",
    "@babel/core": "^7.0.0",
    "@babel/plugin-proposal-class-properties": "^7.0.0",
    "@babel/preset-env": "^7.0.0",
    "@babel/preset-react": "^7.0.0",
    "babel-loader": "^8.0.2",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "react-hot-loader": "^4.3.6",
    "webpack": "^4.17.2",
    "webpack-bundle-tracker": "^0.3.0",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.1.8"
  },
  "dependencies": {
    "react": "^16.5.0",
    "react-dom": "^16.5.0"
  }
}

Babelrc

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react"
  ],
  "plugins": [
    "@babel/plugin-proposal-class-properties"
  ]
}

Ancak hata hala var, Sorun nedir?


Sen olmamalıdır / ihtiyacını hem @babel/plugin-proposal-class-propertiesve babel-plugin-transform-class-properties. Yükledikten sonra yeniden inşa ediyorsunuz, değil mi?
SamVK

Babel'in hangi versiyonunu çalıştırıyorsun?
SamVK

paketini paylaş json
Sakhi Mansoor


npx babel-upgrade --write --install
koşmayı

Yanıtlar:


83

Değişiklik

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

İçin

"plugins": [
    [
      "@babel/plugin-proposal-class-properties",
      {
        "loose": true
      }
    ]
  ]

Bu benim için çalıştı


17
npm i --save-dev @ babel / plugin-proposal-class-properties
Abhay Shiro

1
Bu dd'nt benim için işe yaramıyor.
React

5
Ubuntu 18 - Ben yeniden adlandırmak zorunda .babelrciçin babel.config.jsve kullanım module.exportgibi stackoverflow.com/questions/53916434/... github üzerinde tartışıldığı gibi github.com/babel/babel/issues/7879#issuecomment-419732313
Fabrizio BERTOGLIO

2
Test suite failed to run; .loose is not a valid Plugin property
David Callanan

48

İlk olarak: @ babel / plugin-proposal-class-properties'i dev bağımlılığı olarak kurun :

npm install @babel/plugin-proposal-class-properties --save-dev

Sonra .babelrc dosyanızı tam olarak şöyle olacak şekilde düzenleyin:

{
  "presets": [
      "@babel/preset-env",
      "@babel/preset-react"
  ],
  "plugins": [
      [
        "@babel/plugin-proposal-class-properties"
      ]
  ]
}

package.json'un bulunduğu kök dizinde bulunan .babelrc dosyası .

Değişikliklerin etkili olması için web paketi geliştirici sunucunuzu yeniden başlatmanız gerektiğini unutmayın.


2
bu benim için çalışıyor, teşekkürler. Sanırım babel 7.0+ için çözüm
Black Hole

45

Web paketi projesi için çözüm

Bu sorunu @babel/plugin-proposal-class-propertieswebpack yapılandırma eklentisine ekleyerek çözüyorum. Benim modül bölümü webpack.config.jsşuna benziyor

module: {
    rules: [
        {
            test: path.join(__dirname, '.'),
            exclude: /(node_modules)/,
            loader: 'babel-loader',
            options: {
                presets: ['@babel/preset-env',
                          '@babel/react',{
                          'plugins': ['@babel/plugin-proposal-class-properties']}]
            }
        }
    ]
}

3
Birçok yapılandırma dosyasına (webpack.config.js, package.json ve .babelrc gibi) sahip olmak iyi olmadığından webpack'i kullandığınızda doğru cevap bu olmalıdır - github.com/babel/babel/issues/8655# issuecomment-419795548
Miro J.

benim için mükemmel çalıştı - bu konuda günlerce şaşırdı ... çok teşekkürler.
samuelsaumanchan

37
{
    "presets": [
        "@babel/preset-env",
        "@babel/preset-react"
    ],
    "plugins": [
        [
          "@babel/plugin-proposal-class-properties"
        ]
    ]
}

.babelrc dosyanızı yukarıdaki kodla değiştirin. benim için sorunu çözdü.


Create-react-app'i çıkardıysanız, webpack.config.demo ve package.json'daki herhangi bir yapılandırmayı bu yapılandırmayla değiştirin. Bu koşmak anlamına gelirnpm install --save-dev @babel/preset-env @babel/preset-react @babel/plugin-proposal-class-properties
Francisco Hodge

Bu çok açıktı. Öyle oldu ki, @babel/plugin-proposal-class-propertiesbağımlılığı kaçırdım.
khwilo

12

Çalışma ortamımın kökünde .babelrc dosyası yoktu. Ancak, package.json'daki girişin ardından sorunu çözdü.

"babel": {
"presets": [
  "@babel/preset-env",
  "@babel/preset-react"
],
"plugins": [
  "@babel/plugin-proposal-class-properties"
]}

Not: npm veya iplik komutlarını uygulamadan önce konsoldan çıkmayı ve yeniden açmayı unutmayın.


6

Yaklaşık 3 saat boyunca aynı hatayı araştırıp harcadıktan sonra, React için ad içe aktarmayı kullandığımı fark ettim:

import { React } from 'react';

ki bu tamamen yanlış. Yalnızca şuna geçerek:

import React from 'react';

tüm hatalar gitti. Umarım bu birine yardımcı olur. Bu benim .babelrc'im:

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react"
  ],
  "plugins": [
      "@babel/plugin-proposal-class-properties"
  ]
}

webpack.config.js

const path = require('path');
const devMode = process.env.Node_ENV !== 'production';
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
  entry: './src/App.js',
  devtool: 'source-map',
  output: {
    path: path.resolve(__dirname, 'public'),
    filename: 'App.js'
  },
  mode: 'development',
  devServer: {
    contentBase: path.resolve(__dirname, 'public'),
    port:9090,
    open: 'google chrome',
    historyApiFallback: true
  },
  module: {
    rules: [
      {
        test: /\.m?js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader'
        }
      },{
        test: /\.(sa|sc|c)ss$/,
        use: [
          devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
          {
            loader: 'css-loader',
            options: {
              modules: true,
              localIdentName: '[local]--[hash:base64:5]',
              sourceMap: true
            }
          },{
            loader: 'sass-loader'
          }
        ]
      }
    ]
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: devMode ? '[name].css' : '[name].[hash].css',
      chunkFilename: devMode ? '[id].css' : '[id].[hash].css'
    })
  ]
}

package.json

{
  "name": "expense-app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack",
    "serve": "webpack-dev-server"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/cli": "^7.1.2",
    "@babel/core": "^7.1.2",
    "@babel/plugin-proposal-class-properties": "^7.1.0",
    "@babel/preset-env": "^7.1.0",
    "@babel/preset-react": "^7.0.0",
    "babel-loader": "^8.0.4",
    "css-loader": "^1.0.0",
    "mini-css-extract-plugin": "^0.4.3",
    "node-sass": "^4.9.3",
    "react-router-dom": "^4.3.1",
    "sass-loader": "^7.1.0",
    "style-loader": "^0.23.1",
    "webpack": "^4.20.2",
    "webpack-cli": "^3.1.2",
    "webpack-dev-server": "^3.1.9"
  },
  "dependencies": {
    "normalize.css": "^8.0.0",
    "react": "^16.5.2",
    "react-dom": "^16.5.2"
  }
}

Bu cevap benim için alakasız görünüyor. Yanlış bir içe aktarma, kullandığınız eklentilerden bağımsız olarak, yanlış bir içe aktarmadır.
Marco Faustinelli

Geri bildiriminiz için teşekkürler @MarcoFaustinelli. Yanlış bir içe aktarma, bu hatanın nedenlerinden biridir. Çok basit ve temel bir sorun ama herkesin başına gelebilir. Cevap, bir soruna rehberlik eder.
Mo Hemati

Benim için işe yaradığı için değil, sorunun ne olduğunu anlamama yardımcı olduğu için oy verildi - bu hata mesajı çok spesifik değil.
Pro Q

6
  • Eklenti-teklif-sınıfı-özelliklerini yükleyin npm install @babel/plugin-proposal-class-properties --save-dev

  • Ekleyerek webpack.config.js dosyanızı güncelleyin 'plugins': ['@babel/plugin-proposal-class-properties']}]


'Eklentileri' nasıl ekleyeceğiniz hakkında daha fazla bilgi için bu sayfaya bakın
Pro Q

Bunu yapmak bana şu çizgide bir hata veriyor:Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema. - configuration.plugins[1] should be one of these: object { apply, … } | function -> Plugin of type object or instanceof Function Details: * configuration.plugins[1] should be an object. -> Plugin instance * configuration.plugins[1] should be an instance of function -> Function acting as plugin
Pro Q

5

Benim .babelrcgöz ardı edildiğim sorunu buluyorum , ancak babel.config.jsaşağıdakileri oluşturup ekliyorum:

module.exports = {
  plugins: [
    ['@babel/plugin-proposal-decorators', { legacy: true }],
    ['@babel/plugin-proposal-class-properties', { loose: true }],
    '@babel/plugin-syntax-dynamic-import',
    '@babel/plugin-transform-regenerator',
    [
      '@babel/plugin-transform-runtime',
      {
        helpers: false,
        regenerator: true,
      },
    ],
  ],
  presets: [
    "@babel/preset-flow",
    'module:metro-react-native-babel-preset',
  ],
};

Ve benim için React Native uygulamasında işe yarıyor, bunun React uygulamalarına da yardımcı olacağını düşünüyorum.


1
module.exports = { "presets": ["module:metro-react-native-babel-preset"], "plugins": ["@babel/plugin-proposal-class-properties"] }benim için yeterliydi. Cevabınızı güncelleyebilir misiniz ve ayrıca neden .babelrcgöz ardı edildiğini de anlamalıyız
Fabrizio Bertoglio

@FabrizioBertoglio Babel 7 artık .babelrc'yi otomatik olarak yüklemiyor. 7'de Babel'de yeni olan bir "kök" dizin kavramıdır. Proje çapında yapılandırma için Babel otomatik olarak bir "babel.config.js" araması yapacaktır
Hussam Kurd


5

Laravel Framework 5.7.19 üzerinde test ettim ve aşağıdaki adımlar işe yarıyor:

.Babelrc dosyanızın uygulamanızın kök klasöründe olduğundan emin olun ve aşağıdaki kodu ekleyin:

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

Çalıştırmak npm install --save-dev @babel/plugin-proposal-class-properties.

Çalıştır npm run watch.


4

Babel ayrıştırıcısını açıkça kullanıyorum. Yukarıdaki çözümlerden hiçbiri benim için işe yaramadı. Bu işe yaradı.

const ast = parser.parse(inputCode, {
      sourceType: 'module',
      plugins: [
        'jsx',
        'classProperties', // '@babel/plugin-proposal-class-properties',
      ],
    });

bu kodu nereye eklemeliyim? ve react js mi kullanıyorsunuz?
MoHammaD ReZa DehGhani

1
Bu kod, bir babel eklentisi geliştiriyorsanız geçerlidir. Ve evet, eklentim JSX için. github.com/Ghost---Shadow/i18nize-react
Souradeep Nanda

4

Göre bu kullandığınız takdirde GitHub konuyla oluşturmak-tepki-app size kopyalamak gerekir .babelrcya babel.config.jsyapılandırmaları webpack.config.jsve kod htis iki hattın silme those.because babelrc: false,configFile: false,babelrc içinde yapılandırma, .. işe yaramaz. ve webpack.config.jssenin içinde is ./node_madules/react-scripts/configklasöründe böyle sorunumu çözdü:

{
              test: /\.(js|mjs)$/,
              exclude: /@babel(?:\/|\\{1,2})runtime/,
              loader: require.resolve('babel-loader'),
              options: {
                babelrc: false,
                configFile: false,
                compact: false,
                presets: [
                  [
                    require.resolve('babel-preset-react-app/dependencies'),
                    { helpers: true },

                  ],
                  '@babel/preset-env', '@babel/preset-react'
                ],
                plugins: ['@babel/plugin-proposal-class-properties'],
                .
                .
                .

4

Benim stateiçin constructor functionçalışılanın içini hareket ettirmek :

...
class MyComponent extends Component {
  constructor(man) {
    super(man)
    this.state = {}
  }
}
...

İyi şanslar...


3

İplik kullanıyorum. Hatanın üstesinden gelmek için aşağıdakileri yapmam gerekiyordu.

yarn add @babel/plugin-proposal-class-properties --dev

3

Ekleme

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

.babelrcbenim için çalışmalara dönüştü .


2

yarn add --dev @babel/plugin-proposal-class-properties

veya

npm install @babel/plugin-proposal-class-properties --save-dev .babelrc


1

Bazı tek monorepo aşağıda çalışan Eğer tepki yerli-web monorepo gereğinden fazla config-overrides.jsdosya packages/web. eklemen gerekresolveApp('../../node_modules/react-native-ratings'),o dosyaya ...

Tam config-override.jsdosyam

const fs = require('fs');
const path = require('path');
const webpack = require('webpack');

const appDirectory = fs.realpathSync(process.cwd());
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);

// our packages that will now be included in the CRA build step
const appIncludes = [
    resolveApp('src'),
    resolveApp('../components/src'),
    resolveApp('../../node_modules/@react-navigation'),
    resolveApp('../../node_modules/react-navigation'),
    resolveApp('../../node_modules/react-native-gesture-handler'),
    resolveApp('../../node_modules/react-native-reanimated'),
    resolveApp('../../node_modules/react-native-screens'),
    resolveApp('../../node_modules/react-native-ratings'),
    resolveApp('../../node_modules/react-navigation-drawer'),
    resolveApp('../../node_modules/react-navigation-stack'),
    resolveApp('../../node_modules/react-navigation-tabs'),
    resolveApp('../../node_modules/react-native-elements'),
    resolveApp('../../node_modules/react-native-vector-icons'),
];

module.exports = function override(config, env) {
    // allow importing from outside of src folder
    config.resolve.plugins = config.resolve.plugins.filter(
        plugin => plugin.constructor.name !== 'ModuleScopePlugin'
    );
    config.module.rules[0].include = appIncludes;
    config.module.rules[1] = null;
    config.module.rules[2].oneOf[1].include = appIncludes;
    config.module.rules[2].oneOf[1].options.plugins = [
        require.resolve('babel-plugin-react-native-web'),
        require.resolve('@babel/plugin-proposal-class-properties'),
    ].concat(config.module.rules[2].oneOf[1].options.plugins);
    config.module.rules = config.module.rules.filter(Boolean);
    config.plugins.push(
        new webpack.DefinePlugin({ __DEV__: env !== 'production' })
    );

    return config
};

1

Babel ile bazı jsx'leri aktarmaya çalışırken aynı sorunla karşılaştım. Benim için işe yarayan çözüm aşağıdadır. Aşağıdaki json'u .babelrc dosyanıza ekleyebilirsiniz

{
  "presets": [
    [
      "@babel/preset-react",
      { "targets": { "browsers": ["last 3 versions", "safari >= 6"] } }
    ]
  ],
  "plugins": [["@babel/plugin-proposal-class-properties"]]
}

1

Webpack ile react projeleri için:

  1. Yapın: npm install @ babel / eklenti-öneri-sınıfı-özellikleri --save-dev
  2. Oluştur .babelrckök klasöründe (mevcut ise) dosyasını nerede package.jsonve webpack.config.jsmevcut olduğunu ve kod aşağıda ekleyin:

{
  "presets": ["@babel/preset-env", "@babel/preset-react"],
  "plugins": [
    [
      "@babel/plugin-proposal-class-properties",
      {
        "loose": true
      }
    ]
  ]
}

  1. webpack.config.jsDosyaya aşağıdaki kodu ekleyin :

{
            test: /\.jsx?$/,
            exclude: /node_modules/,
            loader: 'babel-loader',
            query: {
                presets: ["@babel/preset-env", "@babel/preset-react"]
            },
            resolve: {
                extensions: ['.js', '.jsx']
            }
}

  1. Terminali kapatın ve npm starttekrar çalıştırın .

0

Src / components -> ../../ bileşenleri için bir sembolik bağ oluşturdum npm start, bu da çıldırdı ve src / components / *. Js'yi jsx olarak yorumlamayı bıraktı, böylece aynı hatayı verdim. Resmi Babel'den bunu düzeltmek için verilen tüm talimatlar işe yaramazdı. Bileşenler dizinini geri kopyaladığımda her şey NORMALE GERİ DÖNDÜ!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.