functions javascript webpack babeljs

javascript - class arrow functions babel



¿La sintaxis de la función de flecha no funciona con webpack? (4)

Además, si desea acostumbrarse al nuevo show de babel, puede usar el archivo babel.config.js lugar de .babelrc . La idea es algo así como el archivo webpack.config.js , pero para configuraciones de babel. Se ha utilizado como a continuación:

module.exports = { presets: [ "@babel/preset-env", "@babel/preset-react" ], plugins: [ "@babel/plugin-transform-arrow-functions", "@babel/plugin-proposal-class-properties" ] }

Asegúrese de instalar todos esos complementos para compilar correctamente. Debo decir que Babel solo recomendó hacer todas estas cosas en el archivo .babelrc para cada uno. Pero ya sabes, no somos todos.

Estoy haciendo una aplicación en react-redux. Estoy usando webpack para empaquetar y babel para transpilar. Cuando intento usar la función de flecha en mi código. Me da error como:

Module build failed: SyntaxError: Unexpected token (34:15) }; > handleSubmit = (event) => { ^ event.preventDefault(); this.props.dispatch(actions.addTodo(this.state.inputText));

El archivo de configuración de mi paquete web tiene el siguiente aspecto:

module.exports = { devtool: ''inline-source-map'', entry: [ ''webpack-hot-middleware/client'', ''./client/client.js'' ], output: { path: require(''path'').resolve(''./dist''), filename: ''bundle.js'', publicPath: ''/'' }, plugins: [ new webpack.optimize.OccurenceOrderPlugin(), new webpack.HotModuleReplacementPlugin(), new webpack.NoErrorsPlugin() ], module: { loaders: [ { test: //.js$/, loader: ''babel-loader'', exclude: /node_modules/, query: { presets: [''react'', ''es2015'', ''react-hmre''] } } ] } };

y estoy usando los siguientes paquetes de babel en mi package.json:

"babel-cli": "^6.6.5", "babel-core": "^6.4.5", "babel-loader": "^6.2.2", "babel-preset-es2015": "^6.3.13", "babel-preset-react": "^6.3.13", "babel-preset-react-hmre": "^1.1.1",

¿Qué hubiera salido mal?


Esto es exactamente lo que funcionó para mí:

1) Instalar babel-plugin-transform-class-properties:

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

2) Agregue opciones (no consultas) a sus reglas:

module.exports = { .......... module: { rules: [ { test: //.(js|jsx)$/, exclude: /(node_modules|bower_components)/, loader: ''babel-loader'', options: { presets: [''env'', ''react'', ''es2015''], plugins: [''transform-class-properties''] } }, { test: //.css$/, use: [''style-loader'', ''css-loader''] } ] }, .......... };


Primero necesitabas editar el archivo .babelrc para

{ "presets": ["react", ["es2016"]], "plugins": [ "babel-plugin-transform-class-properties" ] }

Segundo npm install babel-plugin-transform-class-properties y babel-preset-es2016


Puñalada en la oscuridad, ¿es esta función dentro de una clase? Las funciones de flecha que son miembros de una clase no se incluyen en ES2015 (o 2016). Si quieres hacer algo como:

class Foo { bar = (baz) => { console.log(baz); } }

Tendrá que incluir babel-transform-class-properties .

En su ejemplo, necesitará:

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

y cambia tu cargador a

{ test: //.js$/, loader: ''babel-loader'', exclude: /node_modules/, query: { presets: [''react'', ''es2015'', ''react-hmre''], plugins: [''transform-class-properties''] } }