Il supporto per la sintassi sperimentale "classProperties" non è attualmente abilitato


117

Durante la configurazione di React all'interno del progetto Django, mi sono imbattuto in questo errore

ModuleBuildError in Module build failed (from ./node_modules/babel-loader/lib/index.js): SyntaxError: C: \ Users \ 1Sun \ Cebula3 \ cebula_react \ assets \ js \ index.js: Support for the sperimentale sintassi 'classProperties 'non è attualmente abilitato (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.

Quindi, ho installato @ babel / plugin-proposta-class-properties e l'ho inserito in babelrc

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"
  ]
}

Tuttavia l'errore è ancora presente, qual è il problema ??


Non dovresti avere / bisogno di entrambi @babel/plugin-proposal-class-propertiese babel-plugin-transform-class-properties. Stai ricostruendo dopo l'installazione, sì?
SamVK

Quale versione di Babel stai usando?
SamVK

condividi il tuo pacchetto json
Sakhi Mansoor

Ho modificato il mio pacchetto json
1Sun

prova a correrenpx babel-upgrade --write --install
FDisk

Risposte:


82

Modificare

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

Per

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

Questo ha funzionato per me


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

1
Questo non funziona per me. Non sto espellendo l'app
React

4
Ubuntu 18 - ho dovuto rinominare .babelrca babel.config.jse l'utilizzo module.exportcome stackoverflow.com/questions/53916434/... come discusso su github 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

44

Soluzione per progetto webpack

Ho appena risolto questo problema aggiungendo @babel/plugin-proposal-class-propertiesnel plugin di configurazione webpack. La sezione del modulo del mio ha webpack.config.jsquesto aspetto

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
Questa dovrebbe essere la risposta corretta quando usi webpack, poiché non è bene avere molti file di configurazione (come webpack.config.js, package.json e .babelrc) - github.com/babel/babel/issues/8655# issuecomment-419795548
Miro J.

ha funzionato perfettamente per me - è stato disorientato su questo per giorni ... grazie mille.
samuelsaumanchan

43

Prima installa: @ babel / plugin-proposta-class-properties come dev dependencty:

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

Quindi modifica il tuo .babelrc in modo che sia esattamente così:

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

File .babelrc situato nella directory principale, dove si trova package.json .

Si noti che è necessario riavviare il server di sviluppo webpack affinché le modifiche abbiano effetto.


2
questo funziona per me, grazie. Penso che sia la soluzione per Babel 7.0+
Black Hole

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

sostituisci il tuo file .babelrc con il codice sopra. ha risolto il problema per me.


Se hai espulso create-react-app, modifica qualsiasi configurazione in webpack.config.demo e package.json con questa configurazione. Questo significa correrenpm install --save-dev @babel/preset-env @babel/preset-react @babel/plugin-proposal-class-properties
Francisco Hodge

Questo è stato semplice. È successo così che mi mancasse la @babel/plugin-proposal-class-propertiesdipendenza.
khwilo

11

Nella radice del mio ambiente di lavoro, il file .babelrc non era presente. Tuttavia, dopo aver inserito in package.json il problema è stato risolto.

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

Nota: non dimenticare di uscire dalla console e riaprirla prima di eseguire i comandi npm o filato.


6

Dopo quasi 3 ore di ricerca e di tempo trascorso sullo stesso errore, ho scoperto che sto usando l'importazione del nome per React:

import { React } from 'react';

il che è totalmente sbagliato. Semplicemente passando a:

import React from 'react';

tutti gli errori sono spariti. Spero che questo aiuti qualcuno. Questo è il mio .babelrc:

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

il 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'
    })
  ]
}

il 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"
  }
}

Questa risposta mi sembra irrilevante. Un'importazione sbagliata è un'importazione sbagliata, indipendentemente dai plugin che stai utilizzando.
Marco Faustinelli

grazie per il tuo feedback @MarcoFaustinelli. Un'importazione sbagliata è una delle ragioni di questo errore. Quindi problema semplice e fondamentale ma può capitare a tutti. Una risposta è la guida a un problema.
Mo Hemati

Votato non perché ha funzionato per me, ma perché mi ha aiutato a capire qual era il problema: questo messaggio di errore non è molto specifico.
Pro Q

6
  • Installa le proprietà-classe-proposta-plugin npm install @babel/plugin-proposal-class-properties --save-dev

  • Aggiorna il tuo webpack.config.js aggiungendo 'plugins': ['@babel/plugin-proposal-class-properties']}]


Per ulteriori informazioni su come aggiungere i "plug-in", vedere questa pagina
Pro Q

Questo mi dà un errore sulla falsariga diInvalid 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

Trovo il problema che il mio è .babelrcstato ignorato, tuttavia creo babel.config.jse aggiungo quanto segue:

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',
  ],
};

E funziona per me sull'applicazione React Native, penso che questo aiuterebbe anche le app React.


1
module.exports = { "presets": ["module:metro-react-native-babel-preset"], "plugins": ["@babel/plugin-proposal-class-properties"] }era abbastanza per me. Puoi aggiornare la tua risposta e anche noi dovremmo capire perché è .babelrcstata ignorata
Fabrizio Bertoglio

@FabrizioBertoglio Babel 7 non carica più automaticamente .babelrc. Novità di Babel in 7, è il concetto di directory "root". Per la configurazione a livello di progetto, Babel cercherà automaticamente "babel.config.js"
Hussam Kurd


5

Ho appena testato su Laravel Framework 5.7.19 e i seguenti passaggi funzionano:

Assicurati che il tuo file .babelrc sia nella cartella principale della tua applicazione e aggiungi il codice seguente:

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

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

Corri npm run watch.


4

Sto usando esplicitamente il parser di babel. Nessuna delle soluzioni di cui sopra ha funzionato per me. Questo ha funzionato.

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

dove devo aggiungere questo codice? e usi React js?
MoHammaD ReZa DehGhani

1
Questo codice è se stai sviluppando un plugin babel. E sì, il mio plugin è per JSX. github.com/Ghost---Shadow/i18nize-react
Souradeep Nanda

4

Secondo questo problema di GitHub, se usi create-react-app dovresti copiare le tue configurazioni .babelrco babel.config.jsin webpack.config.jsed eliminarle. A causa di queste due righe di codice, la babelrc: false,configFile: false,tua configurazione in babelrc, .. sono inutili. e il tuo webpack.config.jsè nella tua ./node_madules/react-scripts/configcartella ho risolto il mio problema in questo modo:

{
              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

Spostare l' stateinterno ha constructor functionlavorato per me:

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

In bocca al lupo...


3

Sto usando il filo. Ho dovuto fare quanto segue per superare l'errore.

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

3

Aggiunta

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

in .babelrcopere per me.


2

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

o

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


1

Se qualcuno sta lavorando su monorepo seguendo react-native-web-monorepo di quanto tu abbia bisogno di config-overrides.jsfile in packages/web. devi aggiungere resolveApp('../../node_modules/react-native-ratings'),in quel file ...

Il mio config-override.jsfile completo è

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

Ho affrontato lo stesso problema mentre cercavo di trasferire alcuni jsx con babel. Di seguito è la soluzione che ha funzionato per me. Puoi aggiungere il seguente json al tuo .babelrc

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

0

Ho creato un collegamento simbolico per src / components -> ../../components che ha fatto npm startimpazzire e ha smesso di interpretare src / components / *. Js come jsx, dando così lo stesso errore. Tutte le istruzioni per risolverlo da Babel ufficiale erano inutili. Quando ho copiato la directory dei componenti, tutto era TORNATO ALLA NORMALE!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.