Npm (Node.js) in accoppiata con progetti Laravel (ma non solo!) prima o poi darà grattacapi, con errori quali "throw er; // Unhandled 'error' event"
o "Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema."
, o ancora "Unknown argument: --hide-modules"
.
In genere si ottengono tali errori in prossimità di un passaggio di versione di Node o di npm, oppure a causa di alcuni lock dovuti ad alcune dipendenze.
Di seguito riporto una soluzione che mi è costata diverse ore di tempo in test, ricerche e comprensione. Reputo quindi possa risultare utile in caso si incontrassero errori quali quelli segnalati.
“throw er; // Unhandled ‘error’ event[/wc_code]” o “Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema.” o, ancora, “Unknown argument: –hide-modules”
Come risolvere “throw er; // Unhandled ‘error’ event”
Prendo come esempio la mia situazione attuale:
node -v
restituisce v15.11.0
ed npm -v
invece v7.6.3
Da shell, portarsi nella cartella del progetto Laravel incriminato, digitare nano package,json
Al suo interno cercare “devDependencies”
ed in esso come ultima voce, aggiungere "webpack": "^5.23.0"
Mi raccomando assicurarsi che la voce precedente termini con una virgola prima di inserire webpack o si genereranno errori.
Rimuovere sass e sass-loader, poichè capita che rimangano bloccati ad una versione troppo vecchia rispetto a webpack. Eseguire nell’ordine:
npm uninstall sass
npm uninstall sass-loader
Verranno reinstallati come dipendenze al prossimo lancio di npm run dev
o npn run watch
(non ora!).
A tal proposito, è bene, qualora nel progetto la directory sass sia stata eliminata o non sia mai esistita, creare a mano il file vuoto:
directory_del_progetto_laravel/resources/sass/app.scss
Questo eliminerà eventuali errori nella procedura quando successivamente si eseguirà npm install
(non ora!).
Stesso discorso se si utilizza less.
npm uninstall less
npm uninstall less-loader
Successivamente, lanciare:
rm -rf node_modules
rm package-lock.json yarn.lock
npm cache clear --force
Come risolvere “Unknown argument: –hide-modules”
Qualora si fosse affetti dall’errore Unknown argument: --hide-modules
nel medesimo “package.json” (soprattutto se con versioni di node >= 15.x e npm >= 7.x), modificare la sezione “scripts”.
La procedura più semplice prevede che, nel metodo “development” si elimini il parametro "--hide-modules"
.
Consiglio però, come indicato dalla guida ufficiale di Laravel Mix, di modificare l’intero blocco come segue:
"scripts": {
"development": "mix",
"watch": "mix watch",
"watch-poll": "mix watch -- --watch-options-poll=1000",
"hot": "mix watch --hot",
"production": "mix --production"
}
In questo modo verrà utilizzata la nuova CLI di Mix.
Verifiche finali
E’ giunto il momento di capire se tutto è andato come sperato, ovvero se “Unknown argument: –hide-modules”, “throw er; // Unhandled 'error' event
” o “Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema.
” siano scomparsi.
Digitare:
npm install
Ed infine
npm run dev
Al termine Laravel Mix dovrebbe restituire Compiled succesfully
.
Segui @andymnc (Andrea Manconi) su Twitter per essere sempre aggiornato su guide ed articoli