J'essaie de construire un projet JS react avec des décorateurs. Mon .babelrc ressemble à ceci :
{
"presets": [
"@babel/preset-env",
"@babel/preset-react",
],
"plugins": [
"@babel/plugin-transform-runtime",
"@babel/plugin-transform-object-assign",
[
"@babel/plugin-proposal-decorators",
{
"legacy": true
}
],
["@babel/plugin-proposal-class-properties", { "loose": true }]
]
}
L'ajout du problème @babel/plugin-proposal-decorators apparaît à nouveau.
J'utilise babel 7, webpack 4 et 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"
}
}
Est-ce que j'utilise peut-être mal @babel/plugin-proposal-decorators ? Comme il est indiqué dans la documentation, cela devrait résoudre mon problème, mais il apparaît toujours.
0 votes
Avez-vous résolu le problème ? La configuration me semble bonne. Je déboguerais ce qui se passe en me basant sur la trace de la pile d'erreurs.
1 votes
Non :/ J'ai essayé de mettre à jour mon projet vers babel 7, mais je n'ai pas réussi à cause des décorateurs. Le problème est que j'ai importé le fichier avec les décorateurs, donc je n'avais pas le contrôle total sur ce composant. (Je ne pouvais pas toucher ce composant car d'autres projets l'utilisaient - mauvais ? - Oui)
2 votes
L'installation par npm de @babel/plugin-proposal-decorators et l'ajout de ["@babel/plugin-proposal-decorators", { "legacy" : true }] à ma configuration webpack dans la section babel plugins a suffi à résoudre le problème pour moi. Je me demande si votre .bablerc n'est pas récupéré d'une manière ou d'une autre. La différence est que je n'ai pas de .baberc et que toutes les options babel sont spécifiées dans mon webpack (j'ai utilisé create-react-app et ejected).
1 votes
La solution de @bpursley a également fonctionné.
npm run eject
et ajouté le nouveau plugin à"babel": { "plugins": [ <plugin here> ], "presets": ["react-app"] }