unexpected syntaxerror react failed javascript reactjs webpack babeljs

javascript - syntaxerror - babel react



babel-loader jsx SyntaxError: token inesperado (8)

Esta pregunta ya tiene una respuesta aquí:

Soy un principiante en React + Webpack.

Encontré un error extraño en mi aplicación web Hello World.

Estoy usando babel-loader en webpack para ayudarme a convertir jsx en js, pero parece que babel no puede entender la sintaxis jsx.

Aquí están mis dependencias:

"devDependencies": { "babel-core": "^6.0.14", "babel-loader": "^6.0.0", "webpack": "^1.12.2", "webpack-dev-server": "^1.12.1" }, "dependencies": { "react": "^0.14.1" }

Aquí está mi webpack.config.js

var path = require(''path''); module.exports = { entry: [''webpack/hot/dev-server'',path.resolve(__dirname, ''app/main.js'')], output: { path: path.resolve(__dirname, ''build''), filename: ''bundle.js'' }, module: { loaders: [ { test: //.js$/, exclude: /node_modules/, loader: "babel-loader"} ] } };

Aquí está mi app/main.js

var React = require("react"); React.render(<h1>hello world</h1>,document.getElementById("app"));

Y este es el mensaje de error.

ERROR in ./app/main.js Module build failed: SyntaxError: ~/**/app/main.js: Unexpected token (2:13) 1 | var React = require("react"); > 2 | React.render(<h1>hello world</h1>,document.getElementById("app")); | ^ at Parser.pp.raise (~/**/node_modules/babylon/lib/parser/location.js:24:13)

Gracias por ustedes chicos.


Añadir "babel-preset-react"

npm install babel-preset-react

y agregue la opción "presets" a babel-loader en su webpack.config.js

(o puede agregarlo a su .babelrc o package.js: http://babeljs.io/docs/usage/babelrc/ )

Aquí hay un ejemplo de webpack.config.js:

{ test: //.jsx?$/, // Match both .js and .jsx files exclude: /node_modules/, loader: "babel", query: { presets:[''react''] } }

Recientemente se lanzó Babel 6 y hubo un cambio importante: https://babeljs.io/blog/2015/10/29/6.0.0

Si está utilizando react 0.14, debe usar ReactDOM.render() (from require(''react-dom'') ) en lugar de React.render() : https://facebook.github.io/react/blog/#changelog

ACTUALIZACIÓN 2018

Rule.query ya ha quedado en desuso a favor de Rule.options. El uso en webpack 4 es el siguiente:

npm install babel-loader babel-preset-react

Luego, en la configuración de su paquete web (como una entrada en la matriz module.rules en el objeto module.exports)

{ test: //.jsx?$/, exclude: /node_modules/, use: [ { loader: ''babel-loader'', options: { presets: [''react''] } } ], }


Dado que la respuesta anterior todavía deja a algunas personas en la oscuridad, así es como se vería un webpack.config.js completo:

var path = require(''path''); var config = { entry: path.resolve(__dirname, ''app/main.js''), output: { path: path.resolve(__dirname, ''build''), filename: ''bundle.js'' }, module: { loaders: [{ test: //.jsx?$/, loader: ''babel'', query: { presets:[''es2015'', ''react''] } }] }, }; module.exports = config;


Esto funciona perfecto para mi

{ test: //.(js|jsx)$/, loader: ''babel-loader'', exclude: /node_modules/, query: { presets: [''es2015'',''react''] } },


La siguiente forma me ha ayudado (incluye react-hot, babel loaders y es2015, react presets):

loaders: [ { test: //.jsx?$/, exclude: /node_modules/, loaders: [''react-hot'', ''babel?presets[]=es2015&presets[]=react''] } ]


Me encontré con un problema similar al migrar de babel 5 a babel 6.

Solo estaba ejecutando babel para compilar la carpeta src to lib babel src --out-dir lib

Compartiré mi configuración para babel 6:

Asegúrese de tener instaladas las siguientes dependencias de desarrollo de babel 6

"babel-core": "^6.7.6", "babel-loader": "^6.2.4", "babel-preset-es2015": "^6.6.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-0": "^6.5.0"

Agregue su archivo .babelrc al proyecto:

{ "presets": ["es2015", "stage-0", "react"] }


Para aquellos que todavía podrían estar enfrentando problemas, agregar jsx para probar lo arregló para mí

test: //.jsx?$/,


Para mí, la solución fue crear el archivo .babelrc con este contenido:

{ "presets": ["react", "es2015", "stage-1"] }


Puede encontrar una placa repetitiva realmente buena hecha por Henrik Joreteg (ampersandjs) aquí: https://github.com/HenrikJoreteg/hjs-webpack

Luego en tu webpack.config.js

var getConfig = require(''hjs-webpack'') module.exports = getConfig({ in: ''src/index.js'', out: ''public'', clearBeforeBuild: true, https: process.argv.indexOf(''--https'') !== -1 })