Talvolta quando eseguiamo script Node.js su una macchina Linux può succedere di incorrere in un errore abbastanza frequente.

Sto parlando del No such file or directory.

In due casi particolari mi è successo di incorrere in un errore del genere senza quasi riuscire a spiegarmelo.

1) Installando su Raspbian, Ubuntu et simili dal gestore di pacchetti, node.js. Talvolta senza far troppo caso alle nomenclature si tende a installare node.js con il comando apt-get install node.
Ma la repo “node” in questo caso niente ha a che vedere con node.js. Andando dunque ad eseguire uno script, ad esempio “node app.js” ci appare l’errore:
/usr/bin/env: node: No such file or directory

L’installazione di node.js si effettua col comando: apt-get install nodejs. Dopo l’installazione la shortcut all’applicativo è nodejs. Se vogliamo eseguire con il comando “node” dobbiamo associarvi il binario corretto, in questo modo:

ln -s /usr/bin/nodejs /usr/local/bin/node

2) L’altro caso particolare è quando dopo aver installato un pacchetto globale o altri script scritti da voi, ad esempio npm install -g rpi-dashboard andando ad eseguire da console $ rpi-dashboard -p 80 appare l’errore : No such file or directory, senza ulteriori indicazioni.
Questo errore pur appartenendo alla stessa categoria sopra in realtà è generato da “sviste” se vogliamo, durante lo sviluppo.

Quando scriviamo uno script globale ad esempio, da eseguire su Linux, con quest’intestazione: #!/usr/bin/env node è BENE accertarsi che vi siano marcatori di fine linea UNIX! Per intenderci UNIX Line Ending.
Questo succede quando ad esempio scriviamo lo script js su Windows (con Sublime text o altri editor testuali) e salviamo con le impostazioni di default che regolano come line ending i marcatori \r\n tipici di windows e non \n tipico di UNIX.
Convertendo i line ending in formato UNIX l’errore sparisce. Per farlo è possibile utilizzare l’editor testuale oppure semplici tool come dos2unix.