Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Babel throwing Support for the experimental syntax 'jsx' isn't currently enabled

I started newly writing unit test cases using Jest and Enzyme for the react application and when try to run test cases using jest like "test": "jest --watch" rather "test": "react-scripts test" tests going through babel for the runner to understand react syntax.

And have been doing setup step by step using babel but this error Support for the experimental syntax 'jsx' isn't currently enabled stopping me to go further. And as suggested in some threads I have been trying with npm install --save-dev @babel/plugin-transform-react-jsx and tried to add the same plugin into babel configuration like shown in below package.json file but still no luck. enter image description here

And this is my package.json

{   "name": "multitheme-app",   "version": "0.1.0",   "private": true,   "dependencies": {     "@material-ui/core": "^3.9.0",     "@material-ui/icons": "^3.0.2",     "axios": "^0.18.0",     "babel-plugin-transform-export-extensions": "^6.22.0",     "jest-css-modules": "^2.1.0",     "react": "^16.8.1",     "react-dom": "^16.8.1",     "react-redux": "^6.0.0",     "react-router-dom": "^4.3.1",     "react-scripts": "2.1.5",     "redux": "^4.0.1",     "redux-thunk": "^2.3.0"   },   "scripts": {     "start": "react-scripts start",     "build": "react-scripts build",     "test": "react-scripts test",     "eject": "react-scripts eject"   },   "eslintConfig": {     "extends": "react-app"   },   "browserslist": [     ">0.2%",     "not dead",     "not ie <= 11",     "not op_mini all"   ],   "babel": {     "presets": [       "@babel/preset-react",       "@babel/preset-env",       "@babel/preset-flow"     ],     "plugins": [       "@babel/plugin-transform-modules-commonjs",       "@babel/plugin-transform-react-jsx"            ]   },   "devDependencies": {     "@babel/cli": "^7.10.4",     "@babel/core": "^7.10.4",     "@babel/plugin-proposal-class-properties": "^7.10.4",     "@babel/plugin-syntax-dynamic-import": "^7.8.3",     "@babel/plugin-transform-modules-commonjs": "^7.10.4",     "@babel/plugin-transform-react-jsx": "^7.10.4",     "@babel/preset-env": "^7.10.4",     "@babel/preset-es2015": "^7.0.0-beta.53",     "@babel/preset-flow": "^7.10.4",     "@babel/preset-react": "^7.10.4",     "@babel/runtime": "^7.10.4",     "babel-eslint": "^10.1.0",     "babel-jest": "^26.1.0",     "babel-loader": "^7.1.5",     "babel-plugin-transform-decorators-legacy": "^1.3.5",     "babel-preset-stage-0": "^6.24.1",     "enzyme": "^3.11.0",     "enzyme-adapter-react-16": "^1.15.2",     "enzyme-to-json": "^3.5.0",     "jest": "^23.6.0",     "jest-cli": "^26.1.0"   },   "jest": {     "verbose": true,     "clearMocks": true,     "collectCoverage": true,     "setupTestFrameworkScriptFile": "<rootDir>/src/setupTest.js",     "transform": {       "^.+\\.js$": "babel-jest"     },     "moduleNameMapper": {       "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",       "\\.(css|scss)$": "identity-obj-proxy"     }   } } 

and here is my test case file

import React from 'react'; import Adapter from 'enzyme-adapter-react-16'; import { shallow, configure } from 'enzyme';  import App from './App';  configure({adapter: new Adapter()});   describe('MyComponent', () => {   it('should render correctly in "debug" mode', () => {     const component = shallow(<App debug />);     expect(component).toMatchSnapshot();   }); }); 
like image 948
Venkaiah Yepuri Avatar asked Jul 09 '20 17:07

Venkaiah Yepuri


People also ask

Is Babel required for JSX?

If you work on a React project, chances are you have to deal with Babel. It is needed for 2 main tasks: To compile JSX into React. createElement API calls.

How do I enable JSX in React?

To use JavaScript inside of JSX, you need to surround it with curly braces: {} . This is the same as when you added functions to attributes. To create React components, you'll need to convert the data to JSX elements. To do this, you'll map over the data and return a JSX element.

What is Babel in JSX?

Babel is a JavaScript compiler Babel is a toolchain that is mainly used to convert ECMAScript 2015+ code into a backwards compatible version of JavaScript in current and older browsers or environments.


2 Answers

If this issue is related to using jest,

jest config for your package.json should look like

with typescript -

"jest": {     ...          "transform": {        "^.+\\.(ts|tsx|js|jsx)$": "ts-jest"     },          ... }  

with js -

"jest": {     ...          "transform": {        "^.+\\.(js|jsx)$": "babel-jest"     },          ... }  
like image 145
Sumit Lubal Avatar answered Oct 11 '22 01:10

Sumit Lubal


Looking at the error it looks its not able to load the preset for react. Switch to the config file and move the configuration of babel from package.json to it. A sample file would look like below and will be located at the same level as package.json and called as babel.config.js

module.exports = function (api) {   const presets = [       '@babel/preset-env',     '@babel/preset-react',     '@babel/preset-flow'   ];   const plugins = [     '@babel/plugin-transform-runtime',   ];    /** this is just for minimal working purposes,      * for testing larger applications it is      * advisable to cache the transpiled modules in      * node_modules/.bin/.cache/@babel/register* */   api.cache(false);    return {     presets,     plugins   }; }; 
like image 33
Rain.To Avatar answered Oct 11 '22 02:10

Rain.To