134
votes

Réagir une référence non apprise: le processus n'est pas défini

Je reçois des problèmes avec iframe. Jusqu'à aujourd'hui, tout fonctionnait comme prévu. Aujourd'hui, j'ai ajouté un composant modal très simple et Iframe a commencé à apparaître. Il apparaît lorsque je modifie le fichier et que le rechargement chaud est terminé. De plus, avec ce problème, il affiche une erreur dans la console comme "UNCAPED ReferenceError: le processus n'est pas défini". Quelqu'un peut-il m'aider à m'aider?

Uncaught ReferenceError: process is not defined
    at Object.4043 (<anonymous>:2:13168)
    at r (<anonymous>:2:306599)
    at Object.8048 (<anonymous>:2:9496)
    at r (<anonymous>:2:306599)
    at Object.8641 (<anonymous>:2:1379)
    at r (<anonymous>:2:306599)
    at <anonymous>:2:315627
    at <anonymous>:2:324225
    at <anonymous>:2:324229
    at HTMLIFrameElement.e.onload (index.js:1)
4043 @ VM128:2
r @ VM128:2
8048 @ VM128:2
r @ VM128:2
8641 @ VM128:2
r @ VM128:2
(anonymous) @ VM128:2
(anonymous) @ VM128:2
(anonymous) @ VM128:2
e.onload @ index.js:1
be @ index.js:1
he @ index.js:1
tryDismissErrorOverlay @ webpackHotDevClient.js:184
onHotUpdateSuccess @ webpackHotDevClient.js:109
handleApplyUpdates @ webpackHotDevClient.js:257
(anonymous) @ webpackHotDevClient.js:273
load (async)
be @ index.js:1
he @ index.js:1
tryDismissErrorOverlay @ webpackHotDevClient.js:184
onHotUpdateSuccess @ webpackHotDevClient.js:109
handleApplyUpdates @ webpackHotDevClient.js:257
(anonymous) @ webpackHotDevClient.js:273
Promise.then (async)
tryApplyUpdates @ webpackHotDevClient.js:271
handleSuccess @ webpackHotDevClient.js:106
push../node_modules/react-dev-utils/webpackHotDevClient.js.connection.onmessage @ webpackHotDevClient.js:203
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8"/>
    <link href="%PUBLIC_URL%/favicon.ico" rel="icon"/>
    <meta content="width=device-width, initial-scale=1" name="viewport"/>
    <meta content="#000000" name="theme-color"/>
    <link href="%PUBLIC_URL%/logo192.png" rel="apple-touch-icon"/>
    <link href="%PUBLIC_URL%/manifest.json" rel="manifest"/>
    <title>React App</title>
</head>
<body id="app">
<noscript>You need to enable javascript to run this website</noscript>
<div id="content">
<-- All other content render here -->
</div>
<div class="ReactModalPortal" id="ModalPortal"></div>
</body>
</html>
import React, {useEffect} from 'react';
import ReactDOM from "react-dom";
import Close from "../static/assets/close-white.svg"

const trapStyles = {
    position: 'absolute',
    opacity: 0
}
const Test = () => {

    return ReactDOM.createPortal(
        <div data-react-modal-body-trap="" tabIndex="0" style={trapStyles}/>,
        document.getElementById("app")
    )
}

const Modal = ({ open, onClose, children }) => {

    useEffect(() => {

        if (open)document.getElementById("app").classList.add("ReactModal__Body--open");

        return () => {
            document.getElementById("app").classList.remove("ReactModal__Body--open")
        }
    })
    if (!open) return null

    return ReactDOM.createPortal(
        <>
            <Test />
            <div className="ReactModal__Overlay--after-open">
                <div className="modal-form-page"
                     tabIndex="-1" role="dialog" aria-modal="true">
                    <button onClick={onClose} className="close-modal">
                        <img id="close-button" alt="close" src={Close}/>
                    </button>
                    { children }
                </div>
            </div>
        </>,
        document.getElementById("ModalPortal")
    )
};

export default Modal;


2 commentaires

/ ** * Jusqu'à github.com/facebook/create-react-app/issues / 11771 * est corrigé, cachons le problème et ne l'a pas résolu * / body> iframe [style * = "2147483647"]: pas ([id = "webpack-dev-server-clie‌ nt-overlay" ]) {affichage: aucun; } Ajoutez ceci au fichier root CSS. Correra temporairement le bogue jusqu'à ce qu'il y ait une correction appropriée. Crédits: github.com/facebook/create-react-app/ Problèmes /…


Pourriez-vous inclure le contenu de votre package.json dans la question? S'il vous plaît.


19 Réponses :


15
votes

Le problème a été résolu en mettant à jour les scripts React à 5.0.0


3 commentaires

J'ai mis à niveau mes réactions à 5.0.0, mais je fais toujours face à cette erreur, et elle gèle également l'interface utilisateur


Il gèle l'interface utilisateur car vous avez une erreur.


Ma configuration est éjectée et je n'ai pas de réactions, que faire?



152
votes

La mise à niveau vers React-Scripts v5 n'est pas toujours la solution.

La raison complète de ce bug est décrite ici . En bref, voici un Brief Résumé:

L'erreur est en raison de react-error-overlay ( que beaucoup de gens ne feraient jamais ont entendu parler car il s'agit d'une dépendance de react-scripts ). Les dépendances de ce package ont été mises à jour pour prendre en charge webpack v5, qui n'est malheureusement pas compatible avec react-scripts v4.


Méthode 1

Si la mise à niveau vers react-scripts v5 ne fonctionne pas pour vous, vous pouvez également essayer une autre solution de contournement qui consiste à épingler react-error-overlay à la version 6.0.9 :

supprimez votre yarn.lock ou package-lock.json , puis installez à nouveau vos dépendances. p>

yarn

yarn prendra le champ de résolutions en considération hors de la boîte.

{
  ...
  webpack: {
    plugins: {
      add: [
        new webpack.DefinePlugin({
          process: {env: {}}
        })
      ]
    }
  }
}

pour Yarn Workspaces , placez la résolution ci-dessus dans le package root .json , pas dans le dossier problématique. Voir ce problème Commentaire.

npm (> = v8.3.0 )

L'équivalent de Resolutions pour NPM est Overrides .

plugins:[
  new webpack.DefinePlugin({
      process: {env: {}}
  })
]

npm (

Vous devez vous assurer que npm utilise le champ résolutions lorsque vous exécutez npm install . Pour automatiser l'installation, voir ce Réponse


Méthode 2

Encore une autre solution de contournement (pas si populaire) consiste à utiliser un plugin webpack:

craco (v6.3.0 +), il vous suffit de modifier votre craco.config.js Fichier pour ajouter ce plugin:
"overrides": {
  "react-error-overlay": "6.0.9"
},

pour Personnaliser-CRA Les utilisateurs, voyez cette Réponse Ou cela commentaire github .

Cette dernière méthode n'est pas populaire car peu les utilisateurs de l'ARC doivent jamais toucher WebPack directement pour travailler avec React.


8 commentaires

Dans le cas Craco, dois-je simplement utiliser webpack.defineplugin avec l'argument {process: {Env: {}}} ? Ou est-ce que je référence à la version de dépendance d'une manière ou d'une autre?


@xtra Si vous voulez simplement le faire via Craco, alors en utilisant le plugin webpack.defineplugin avec ces arguments devrait être suffisant. J'ai mis à jour la réponse pour rendre explicite qu'il existe deux méthodes pour résoudre le problème


La méthode 1, corrigée (correcte plus accumulée) le problème ... c'est ennuyeux ...


La méthode 1 exemple fonctionne uniquement pour le fil. Pour les utilisations NPM: "Overrides": {"React-Error-Overlay": "6.0.9"},


J'obtiens toujours l'erreur (selon le titre de la question), mais j'utilise "React-Scripts": "3.4.4", et packages-lock.json show "webpack": "4.42.0"; D'une manière ou d'une autre, cette erreur ne s'est pas produite auparavant dans mon travail de réaction.


L'installation de react-error-overlay@6.0.9 ne gèle plus l'écran pour moi, mais le rechargement chaud ne se produit plus du tout.


La méthode 2, avec Craco 6.1.1, ne fonctionne pas pour moi.


@Mathieucaroff Vous devez mettre à niveau votre version Craco. La dernière version qui prend en charge la méthode que j'ai montrée est v6.3.0





21
votes

Ajoutez ce code dans package.json

 "devDependencies": {
"react-error-overlay": "6.0.9"  },

Après cette commande NPM Install. Cela a fonctionné pour moi après 2 jours de défilement sur Internet.


0 commentaires

23
votes

jusqu'à ce qu'un correctif soit final ( peut-être ce pr ), pour Toute personne utilisant NPM (pas le fil), la solution est la suivante:

Ajouter à package.json:

"resolutions": {
    "react-error-overlay": "6.0.9"
},

"scripts":{
    "preinstall": "npx npm-force-resolutions",
    ....
},

"devDependencies":{
    "react-error-overlay": "6.0.9",
...
}

puis faire un

NPM Install


3 commentaires

La version "React-Scripts": "4.0.1" nécessaire dans les dépendances.


Cela a fonctionné pour moi! Cependant, si vous utilisez du fil, vous n'avez pas besoin du script préinstallé


Cela a également fonctionné pour moi lorsque vous avez le nœud 14, c'est la solution car si vous ne le faites pas, il installera "React-Error-Overlay": "6.0.11", par défaut avec React-Scripts 4.0.0



-2
votes

Amélioration des réactions de réactions de V4 à "React-Scripts": "^ 5.0.0", semble m'a aidé


0 commentaires

1
votes

Si vous utilisez npm> v8.3, vous pouvez utiliser overrides comme ainsi dans votre pack Plus d'informations sur les remplacements, allez ici .

Le problème est un changement de rupture dans 6.0.10 , certaines dépendances comme react-dev-utils installeront cette version même si vous épinglez la version de React-Error-Overlay à 6.0.9 C'est pourquoi il est nécessaire d'utiliser les remplacements.


0 commentaires

5
votes

Beaucoup de réponses suggèrent de remplacer le react-error-overlay à 6.0.9 , mais cela n'a pas fonctionné pour moi (le 11 février 2022). J'utilisais React-Scripts 5.0.0 et React-Error-Overlay 6.0.10 avant d'essayer le remplacement de la superposition.

Au lieu de passer par le harcèlement de définir la configuration de webpack dans mon application CRA (comme suggéré par SMAC89 ), j'ai rétréci react-scripts à 4.0.3 .

Cela fonctionne bien avec react-scripts: 4.0.3 , qui a résolu react-error-overlay à 6.0.10 .

donc, mon correctif est:

  • Définir "React-Scripts": "4.0.3" dans package.json
  • Supprimez votre fichier de verrouillage (yarn.lock ou package-lock.json) et node_modules
  • Exécutez l'installation

1 commentaires

0
votes

Face au même problème aujourd'hui (14 février 22) à l'aide de conteneurs Docker pour une application ReactJS et je l'ai résolu en rétrogradant la version React-Scripts à 4.0.3 et en installant également React-Error-Overlay sur la version 6.0.9. Les étapes étaient donc:

  • Supprimez le fichier package-lock.json
  • dans le fichier package.json
  • Remplacez la dépendance "React-Scripts": "4.0.3"
  • Ajouter React-Error-Oplay dans les dépendances de développement avec "React-Error-Overlay": "6.0.9"
  • Mise à jour NPM: mise à jour NPM
  • J'espère que cela aide quelqu'un à gagner du temps, Bravo.


    0 commentaires

    1
    votes

    Pour ceux qui utilisent Create-React-App avec Persuhalize-CRA, vous pouvez utiliser la solution Method 2 à partir de @ smac89 avec addWebpackPlugin, cela fonctionne pour moi.

    React-Scripts: 5.0.0 webpack: 5.64.4

    WARNING in DefinePlugin
    Conflicting values for 'process.env'
    

    Cette solution lance un avertissement sur le démarrage NPM mais l'application compile correctement.

    // config-overrides.js
    const webpack = require('webpack');
    const { override, addWebpackPlugin } = require('customize-cra');
    
    module.exports = override(
      addWebpackPlugin(
        new webpack.DefinePlugin({
          process: { env: {} },
        })
      )
    );
    
    

    L'avertissement n'a rien freiné mais si quelqu'un sait comment le réparer, veuillez répondre à ce fil :)


    0 commentaires

    1
    votes

    dans yarn.lock ou package-lock.json Fichier pour trouver la chaîne

    react-error-overlay@^6.0.9:
      version "6.0.9"
      resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a"
      integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==
    

    et remplacer à

    "react-error-overlay@npm:^6.0.9":
      version: 6.0.10 <-- here problem
      etc...
    

    fichier enregistré et exécuter Installation du fil


    1 commentaires

    Les fichiers de verrouillage ne sont pas destinés à être modifiés manuellement. Ne fais pas ça! Utilisez Resolutions pour forcer une version spécifique de react-error-overlay



    10
    votes

    J'ai trouvé la meilleure solution.

    Le problème est parce que vous perdez window.process Variable lorsque vous réagissez les charges chaudes, et le processus existe uniquement sur le nœud, pas le navigateur.

    Vous devez donc l'injecter au navigateur lorsque l'application se charge.

    Ajoutez cette ligne à app.js

    useEffect(() => {
        window.process = {
          ...window.process,
        };
      }, []);
    


    3 commentaires

    Ce doit être la meilleure solution. Vous n'avez pas à toucher les configurations des dépendances.


    Si vous en avez besoin dans le formulaire de classe, utilisez ComponentDidMount () {Window.Process = {... Window.Process}}


    Pour moi, c'était du code de middleware redux à l'intérieur du magasin qui recherchait un processus, il a donc dû ajouter window.process = {... window.process} dans mon fichier store.js au-dessus du code du middleware, Mais sinon, il semble être une bonne solution de contournement sans jouer avec les DEP.



    2
    votes

    Pour ceux qui ont encore des problèmes avec ceci: si vous utilisez WebPack, exécutez npm install -d dotenv-webpack et si vous utilisez TypeScript npm install -d @ types / dotenv-webpack code >.
    Ensuite, dans votre configuration Webpack, ajoutez Importer Dotenv à partir de "Dotenv-webpack"; Et

    ...
    plugins: [
        ...
        new Dotenv(),
    ],
    ...
    

    voir https: / /github.com/mrsteele/dotenv-webpack/blob/master/readme.md

    Après avoir essayé tout le reste, cela a finalement fonctionné pour moi.


    1 commentaires

    Merci. C'était la seule solution qui a vraiment fonctionné.



    2
    votes

    La seule solution qui a fonctionné pour moi a été une modification de ce que @ smac89 a écrit pour Craco. Ajoutez d'abord le processus en tant que dépendance.

    const webpack = require('webpack');
    
    module.exports = {
    webpack: {
         ...
         plugins: {
            add: [
                new webpack.ProvidePlugin({
                    process: 'process/browser.js',
                }),
                new webpack.DefinePlugin({
                    'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
                }),
            ],
          },
        },
    };
    

    puis ajoutez ces lignes à votre craco.config.js.

    yarn add process or npm i process
    

    Ceci, à son tour, n'affiche pas l'avertissement ci-dessous dans la console chaque fois que vous démarrez le projet.

    Avertissement dans DefinePlugin Valeurs contradictoires pour 'process.env'


    0 commentaires

    0
    votes

    J'ai eu le même problème dans ReactJS et je l'ai corrigé avec ces étapes:

    Ajouter à package.json:

  • "scripts": { "Preinstall": "NPX NPM-Force-Resolutions" }
  • "Resolutions": { "React-Error-Overlay": "6.0.9" }

  • 0 commentaires

    2
    votes

    La mise à niveau des react-scripts 4.0.3 à 5.0.0 n'a pas fonctionné pour moi. La seule chose qui a finalement fonctionné est la solution proposée ci-dessus

    en utilisant le fil

      "devDependencies": {
            "react-error-overlay": "6.0.9"
          },
      "resolutions": {
            "react-error-overlay": "6.0.9"
          }
    

    puis l'installation du fil

    pour NPM, je pense que "les résolutions" doivent être remplacé par "remplacer"


    1 commentaires

    Le simple fait d'ajouter les résolutions a fonctionné pour moi. Merci!



    0
    votes

    Merci, cela fonctionne pour moi, comme Kaleb disait

    Si vous utilisez WebPack, exécutez NPM Install -d Dotenv-webpack et si vous utilisez TypeScript npm install -d @ types / dotenv-webpack. Ensuite, dans votre configuration Webpack, ajoutez l'importation doletenv à partir de "Dotenv-webpack"; Et

    plugins: [
        ...
        new Dotenv(),
    ],
    


    1 commentaires

    Veuillez ajouter une description et terminer le code pour les utilisateurs courants pour comprendre la solution



    0
    votes

    Je viens de mettre à jour la version de React-Script maintenant cela fonctionne bien pour moi

      "dependencies": {    
        "react-scripts": "5.0.0",
      },
    


    0 commentaires