javascript - Babel Automatic Runtime für React funktioniert nicht richtig. Immer noch bekomme ich Uncaught ReferenceError: React is not defined
Laut neuen Versionen von React sollten wir nicht immer import React from 'react' verwenden. Aber ich habe trotzdem einen Fehler Uncaught ReferenceError: React is not defined.
.babelrc (Das Ändern der Reihenfolge der Presets hilft nicht, das Entfernen einiger Presets auch nicht)
{
"presets": [
[
"@babel/preset-react",
{
"runtime": "automatic"
}
],
"@babel/env",
"@babel/preset-typescript"
]
}
pakage.json
"react": "^18.0.0",
"react-dom": "^18.0.0",
"typescript": "^4.6.3",
"@babel/core": "^7.17.8",
"@babel/node": "^7.16.8",
"@babel/preset-env": "^7.16.11",
"@babel/preset-react": "^7.16.7",
"@babel/preset-typescript": "^7.16.7",
"@types/react": "^17.0.43",
"@types/react-dom": "^17.0.14",
"babel-loader": "^8.2.4",
Antwort #1
Für jeden, der so dumm ist wie ich: Babel hat meine Babel-Konfigurationsdatei stillschweigend ignoriert, weil bereits eine Konfiguration in der package.json-Datei vorhanden war. Stellen Sie sicher, dass Sie nur eine Konfigurationsquelle haben, schätze ich.
Antwort #2
Benenne deine ".babelrc"-Datei in ".config.babel.js" um
Dann innerhalb dieser Datei:
module.exports = {
presets: [
'@babel/preset-env',
'@babel/preset-typescript',
['@babel/preset-react', {runtime: 'automatic'}],
],
};
Die Verwendung dieses Dateiformats ermöglicht es Ihnen, Dateien, die Sie nicht transpillieren lassen möchten, mithilfe der Eigenschaft „transformIgnorePatterns“ in Ihrer „package.json“-Datei einfach zu ignorieren.
Ich persönlich benutze es mit Jest beim Testen von React-Apps, um zu verhindern, dass einige Pakete wie folgt transpiliert werden:
"jest": {
// [...]
"transformIgnorePatterns": [
"<rootDir>/node_modules/(?!react-bootstrap|bootstrap)"
]
// [...]
}
Hoffentlich wird es einigen Leuten helfen.
