Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
Ask Question
Adding @babel/plugin-proposal-decorators problems appears again.
I am using babel 7, webpack 4 and react 16.5
webpack.config.js:
const path = require("path");
const webpack = require("webpack");
const componentName = "reports-desktop";
const publicFolderRelativePath = "../../../../../../public/js";
const ignorePlugin = new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/);
module.exports = {
entry: './reports-desktop.js'
output: {
path: path.resolve(__dirname, publicFolderRelativePath),
filename: `${componentName}.js`
module: {
rules: [
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader"
plugins: [
ignorePlugin
package.json:
"name": "captain",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"watch": "webpack -w --mode development --progress --color --display-error-details",
"build": "webpack --mode production"
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.0.0",
"@babel/plugin-proposal-class-properties": "^7.0.0",
"@babel/plugin-proposal-decorators": "^7.0.0",
"@babel/plugin-transform-object-assign": "^7.0.0",
"@babel/plugin-transform-runtime": "^7.0.0",
"@babel/preset-env": "^7.0.0",
"@babel/preset-react": "^7.0.0",
"@babel/preset-stage-1": "^7.0.0",
"@babel/preset-stage-2": "^7.0.0",
"babel-loader": "^8.0.2",
"babel-plugin-transform-decorators": "^6.24.1",
"react": "^16.5.0",
"react-dom": "^16.5.0",
"react-redux": "^5.0.7",
"react-router-dom": "^4.3.1",
"redux": "^4.0.0",
"webpack": "^4.17.3",
"webpack-cli": "^3.1.0"
"dependencies": {
"axios": "^0.18.0",
"dropzone": "^5.5.1",
"lodash": "^4.17.10",
"moment": "^2.22.2",
"prop-types": "^15.6.2",
"react-addons-update": "^15.6.2",
"react-bootstrap": "^0.32.4",
"react-datetime": "^2.15.0",
"react-dnd": "^5.0.0",
"react-dnd-html5-backend": "^5.0.1",
"react-media": "^1.8.0",
"react-tooltip": "^3.8.1"
Am I maybe using @babel/plugin-proposal-decorators wrong? As it says in documentation this should fix my problem, but it still appears.
–
–
–
–
I had the same problem, but I was able to get it working by running npm install --save-dev @babel/plugin-proposal-decorators
and adding ["@babel/plugin-proposal-decorators", { "legacy": true }]
to the plugins section in my .babelrc
.
The plugins section of .babelrc
, for me, now looks like this:
"plugins": [
["@babel/plugin-proposal-decorators", { "legacy": true }]
–
–
–
–
First, execute the command:
npm install customize-cra react-app-rewired @babel/plugin-proposal-decorators --save
Create a new file config-overrides.js
at project root and then execute the following:
const { override, addDecoratorsLegacy } = require('customize-cra');
module.exports = override(
addDecoratorsLegacy()
Also, edit your package.json
file :
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-app-rewired eject"
then restart.
Taken from mobxjs. If you're still having issues refer to this. It helped me.
Example config for babel 7, in decorators legacy mode:
//.babelrc
"presets": ["@babel/preset-env"],
"plugins": [
["@babel/plugin-proposal-decorators", { "legacy": true }],
["@babel/plugin-proposal-class-properties", { "loose": true }]
Please note that plugin ordering is important, and plugin-proposal-decorators should be the first plugin in your plugin list
"devDependencies": {
"@babel/core": "^7.1.0",
"@babel/plugin-proposal-class-properties": "^7.1.0",
"@babel/plugin-proposal-decorators": "^7.1.0",
"@babel/preset-env": "^7.1.0"
Non-legacy mode decorators (stage 2) is work in progress, see #1732
Edit: updated config to show the non-beta configuration for babel 7
–
–
I fixed this with yarn add @babel/plugin-proposal-decorators
Then I added the following to babel.config.js
in the plugins
section:
require('@babel/plugin-proposal-decorators').default,
legacy: true
Finally I needed to restart my webpack dev server.
I haven't tested this but like @christopher bradshaw answers says and according to the babel website if you are using .babelrc
for configuration then add the following to the "plugins"
section:
["@babel/plugin-proposal-decorators", { "legacy": true }]
If you face this error while using ReactJS with MobX, don't enable decorator syntax, but leverage the MobX's built-in decorate utility to apply decorators to your classes / objects.
Don't:
import { observable, computed, action } from "mobx";
class Timer {
@observable start = Date.now();
@observable current = Date.now();
@computed
get elapsedTime() {
return this.current - this.start + "milliseconds";
@action
tick() {
this.current = Date.now();
import { observable, computed, action, decorate } from "mobx";
class Timer {
start = Date.now();
current = Date.now();
get elapsedTime() {
return this.current - this.start + "milliseconds";
tick() {
this.current = Date.now();
decorate(Timer, {
start: observable,
current: observable,
elapsedTime: computed,
tick: action
–
–
–
–
"plugins": [
["@babel/plugin-proposal-decorators", { "legacy" : true }],
["@babel/plugin-proposal-class-properties", { "loose" : true }],
Unfortunately none of the mentioned solutions worked for me. Because they need you to run npm run eject
first and ... I don't want to do that. To change and override the webpack's configs at runtime, there's a package called react-app-rewired
and this is how it should be used:
First install the required dependencies:
npm i --save-dev customize-cra react-app-rewired
Then add a new file called config-overrides.js
to the root folder of the project with this content to enable legacy decorators babel plugin:
const {
override,
addDecoratorsLegacy,
disableEsLint
} = require("customize-cra");
module.exports = override(
// enable legacy decorators babel plugin
addDecoratorsLegacy(),
// disable eslint in webpack
disableEsLint()
Finally change the package.json
file to use react-app-rewired
:
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-app-rewired eject"
Now run the npm start
as usual and enjoy it!
As of 2021, with Create React App 4.0, only the following steps are required.
Make sure you do not eject.
npm i --save-dev customize-cra react-app-rewired
Add config-overrides.js
with:
const { addDecoratorsLegacy, override } = require('customize-cra')
module.exports = override(addDecoratorsLegacy())
Add babel.config.js
with:
module.exports = {
plugins: [['@babel/plugin-proposal-decorators', { legacy: true }]],
Open package.json
/ scripts section and search-replace react-scripts
-> react-app-rewired
.
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
After this, both start
, build
, and test
commands will work with the codebase.
"@babel/core": "^7.2.2",
"@babel/plugin-proposal-class-properties": "^7.1.0",
"@babel/plugin-proposal-decorators": "^7.1.0",
"@babel/preset-env": "^7.2.3",
"@babel/preset-react": "^7.0.0",
"@babel/register": "^7.0.0",
"babel-loader": "^8.0.5"
webpack.config.js
presets: ["@babel/preset-env", "@babel/preset-react"]
.babelrc
"presets": [
"@babel/preset-env",
"@babel/preset-react"
"plugins": [
["@babel/plugin-proposal-decorators", { "legacy": true }],
["@babel/plugin-proposal-class-properties", { "loose": true }]
As of 2021,if you've already “run Eject”,to edit the file called "babelTransform" under the path "/config/jest/BabelTransform",like this:
module.exports = babelJest.createTransformer({
presets: [
require.resolve('babel-preset-react-app'),
runtime: hasJsxRuntime ? 'automatic' : 'classic',
"plugins": [
"@babel/plugin-proposal-decorators",
"legacy": true,
babelrc: false,
configFile: false,
and it worked.
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-scripts eject"
All credits go to this article: https://www.tderflinger.com/en/litelement-react-app
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.