ERRORE FATALE: Mark inefficace-compatta vicino allocazione limite heap non riuscita - JavaScript heap memoria esaurita in ionic 3
Quando eseguo il progetto ionic 3 usando il comando" ionic serve " piuttosto che ottenere questo errore:
28 answers
Per una risposta generale non angolare per coloro che atterrano su questa domanda da Google:
Ogni volta che si verifica questo errore è probabilmente a causa di una perdita di memoria o di una differenza tra il modo in cui il nodo 10 gestiscono la memoria. Di solito solo aumentare la memoria allocata al Nodo consentirà al programma di eseguire ma potrebbe non risolvere il vero problema e la memoria utilizzata dal processo del nodo potrebbe ancora superare la nuova memoria allocata. Consiglierei di profilare l'utilizzo della memoria in il processo del nodo quando inizia l'esecuzione o l'aggiornamento al nodo > 10.
Ho avuto una perdita di memoria. Ecco un ottimo articolo sul debug delle perdite di memoria nel nodo.Detto questo, per aumentare la memoria, nel terminale in cui si esegue il processo del nodo:
export NODE_OPTIONS="--max-old-space-size=8192"
Dove i valori di max-old-space-size
possono essere: [2048, 4096, 8192, 16384]
ecc
[UPDATE] Altri esempi per maggiore chiarezza:
export NODE_OPTIONS="--max-old-space-size=5120" #increase to 5gb
export NODE_OPTIONS="--max-old-space-size=6144" #increase to 6gb
export NODE_OPTIONS="--max-old-space-size=7168" #increase to 7gb
export NODE_OPTIONS="--max-old-space-size=8192" #increase to 8gb
# and so on...
# formula:
export NODE_OPTIONS="--max-old-space-size=(X * 1024)" #increase to Xgb
# Note: it doesn't have to be multiples of 1024.
# max-old-space-size can be any number of memory megabytes(MB) you have available.
Nel mio caso, risolvi questo problema installando NodeJS,versione 12.10.0
Stesso problema su centos server 7, ma questo ha risolto il mio problema:
node --max-old-space-size=X node_modules/@angular/cli/bin/ng build --prod
Dove X = (2048 or 4096 or 8192 o..)
è il valore della memoria
Prova questa soluzione che è stata indicata in un vecchio messaggio sul forum: https://forum.ionicframework.com/t/3-7-0-ios-build-with-prod-not-working/107061/24
Apri node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js
Cambia la prima riga da:
#!/usr/bin/env node
Da A
#!/usr/bin/env node --max-old-space-size=4096
Prova i valori 1024 e 2048, ma per un'app relativamente grande potrebbe essere necessario 4096.
Ho ricevuto lo stesso errore quando eseguo il comando ng build
nel codice di Visual Studio. Ma posso costruire con successo quando eseguo la stessa cosa nella riga di comando di Windows nella seguente sequenza.
Punto 1.
set NODE_OPTIONS=--max_old_space_size=4096
Punto 2.
ng build
Ho ricevuto lo stesso messaggio di errore quando eseguo le seguenti istruzioni nel codice di Visual Studio. Ma posso costruire con successo quando eseguo la stessa cosa nella riga di comando di Windows.
npm install -g increase-memory-limit
increase-memory-limit
set NODE_OPTIONS=--max_old_space_size=4096
ng build -c deploy --build-optimizer --aot --prod --sourceMap
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --baseHref=/baseUrl/ --prod=true
Per alcuni motivi tutta la risposta sopra non ha funzionato davvero per me, ho fatto quanto segue per risolvere il mio problema:
- Ho dovuto prima eliminare la cartella
node_modules
- reinstallare il nodo.js sul mio PC e
- poi
npm install
Nodo max max_old_space_size=4096 ./ node_modules / @ angular/cli / bin / ng build pro prod build build-optimizer
L'aggiunta del parametro --build-optimizer
ha risolto il problema nel mio caso.
Aggiornamento:
Non sono sicuro del motivo per cui l'aggiunta solo di build build-optimizer risolve il problema, ma come da angular docs dovrebbe essere usato con aot abilitato, quindi il comando aggiornato dovrebbe essere come sotto
--build-optimizer=true --aot=true
Eseguire questo comando nella cartella del progetto. Usa serve invece di costruire
node --max_old_space_size=8000 node_modules/@angular/cli/bin/ng serve --prod --port=4202
Sostituire la riga
"start": "ng serve -o --port 4300 --configuration=en"
con
"start": "node --max_old_space_size=5096 node_modules/@angular/cli/bin/ng serve -o --port 4300 --configuration=en"
NOTA:
La porta 4 4300 non è costante dipende dalla porta selezionata.
-
--max_old_space_size = 5096 troppo non costante; qualsiasi valore 1024,2048,4096 ecc
Nel mio caso era una ricorsione che stava causando react per consumare tutta la memoria.
Questo è successo quando stavo refactoring il mio codice e non l'ho notato.
const SumComponent = () => {
return (
<>
<SumComponent />
</>
)
}
In altre applicazioni nodo questo potrebbe essere simile a:
const someFunction = () => {
...
someFunction();
...
}
Per me è stato un problema con il pacchetto firebase.
Aggiungi solo "@ firebase / database":" 0.2.1", per il tuo pacchetto.json, reinstallare node_modules e funziona.
L'aggiornamento dal nodo 12 al nodo 14 ha risolto il problema per me
Ho eliminato il modulo nodo esistente ed eseguito i comandi seguenti per risolvere il mio problema
npm install -all
npm audit fix
Pls controllare la versione del nodo:
$ node -v
Se è 10.1.1 qualcosa, è necessario aggiornare la versione del nodo di livello root tramite i comandi seguenti
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
$ source ~/.nvm/nvm.sh
$ nvm ls
$ nvm install 12.18.1
Una volta fatto pls riavviare il terminale o visual studio.
È lavoro 100 {
Per l'utente ionico pls aggiungere il codice qui sotto nel vostro pacchetto.json
"ionic:build": "node --max-old-space-size=16384 ./node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js build",
Un'altra risposta non angolare (stavo affrontando lo stesso problema creando un'app react su AWS Amplify).
Come menzionato da Emmanuel sembra che derivi dalla differenza nel modo in cui la memoria viene gestita dal nodo v10 rispetto al nodo v12.
Ho cercato di aumentare la memoria senza alcun risultato. Ma usando il nodo v12 lo ha fatto.
Controlla come aggiungere nvm use $VERSION_NODE_12
alle impostazioni di compilazione come spiegato da richard
frontend: phases: preBuild: commands: - nvm use $VERSION_NODE_12 - npm ci build: commands: - nvm use $VERSION_NODE_12 - node -v - npm run-script build
Per me, il problema era avere una cartella node_modules
aggiuntiva che ho rinominato in node_modules_old
e l'esecuzione di un npm install
per generare un nuovo node_modules
. In qualche modo la build deve aver ancora raccolto la cartella node_modules_old
, quindi ho spostato node_modules_old
fuori dalla directory per risolvere il problema.
Basta digitare questo nel terminale:
export NODE_OPTIONS="--max-old-space-size=8192"
Per me, ho avuto un errore di sintassi (che non si è presentato) e ha causato questo errore.
Controlla il nome della cartella. Se il nome della cartella ha spazi, questo tipo di problemi genererà. Rinominare senza spazi. spero che funzioni.
Se ciò accade durante l'esecuzione dell'applicazione React su VSCode, controlla i tuoi propTypes, i Proptypes indefiniti portano allo stesso problema.
Per me ho ricevuto questo errore perché ho perso l'accesso al percorso di output per la cartella dist impostata nel mio angolare.file json. Dopo essermi ricollegato al percorso remoto con credenziali aggiornate, l'errore è andato via.
#!/usr / bin / env node max max-old-space-size=4096 negli script ionic-app.js dint work
Modifica di
Node_modules/.bin / ionic-app-script.cmd
Aggiungendo:
@SE ESISTE "%~dp0\node.exe" ( "%~dp0\node.exe "" % ~dp0..@ ionic \ app-scripts \ bin \ ionic-app-scripts.js" %* ) ALTRO ( @ SETLOCAL @ SET PATHEXT= % PATHEXT:;.JS;=;% nodo max max_old_space_size=4096 "% ~ dp0..@ ionic \ app-scripts \ bin \ ionic-app-scripts.js" %* )
Lavorato fianlly
Per me, ho riscontrato questo problema quando eseguivo eslint e una correzione più carina e formavo con una directory build
nel mio progetto React, dopo averlo rimosso tutte le cose hanno funzionato.
Immagino che questo sia perché ci sono troppi file.
Immagino che ci siano molti modi per raggiungere questo errore!
Dalla mia parte, ho avuto un ciclo nel mio package.json
. Il progetto A aveva una dipendenza dal progetto B, che aveva una dipendenza dal progetto A.
Questo problema era sparito, dopo aver aggiornato tutte le mie librerie come nodejs, typescript, yarn, npm, ecc.
A volte la semplicità è la chiave del successo. Cerca while (i <= 10000) {}
senza aumentare i
nel tuo codice ;)