2015-05-20 9 views
7

Ho creato il mio script eseguibile per eseguire grunt. Su Windows, il mio script di nodo funziona correttamente. Ma su Mac OS X (Yosemite), non funziona.Eseguibile script di nodi non funziona su Mac: env: node r: Nessun file o directory

Lo script del mio nodo è stato pubblicato su Windows.

Il mio script nodo è installato tramite il comando NPM:

npm install -g task-app 

Il mio script nodo hanno questa prima linea:

#! /usr/bin/env node 

Ho provato molte alcune soluzioni per risolvere il mio problema, ma io sono ancora bloccati .

Ecco queste soluzioni che ho usato:

  1. disinstallare e reinstallare Node.js
  2. eseguire questo comando per creare un collegamento per il nodo: sudo ln -s/usr/bin/nodejs /usr/local/bin/nodo
  3. impostato il mio percorso con questo comando: export PATH = $ PATH:/usr/local/bin/nodo

hai altre soluzioni da proporre?

EDIT:

all'inizio del mio script:

#! /usr/bin/env node 

var grunt = require('grunt'); 

//Get parameters from command line 
var args = process.argv.splice(2); 

[...] 

risposta

22

Dopo tutto, ho trovato la soluzione al mio problema.

Poiché il file di script del nodo è stato creato su Windows, il file è in formato DOS (terminazioni di riga in formato DOS, credo). Così, ho usato un modulo che permette di convertire un file in un formato UNIX:

brew install dos2unix 
sudo dos2unix /usr/local/lib/node_modules/task-app/src/task-app.js 
+0

Esattamente quello di cui avevo bisogno. Grazie! –

+0

funziona con ionico 2, grazie – vuhung3990

+0

risolto il problema sul mio mac El Capitan da uno che ho avviato sul mio pc a casa, un vero toccasana! –

6

C'è un problema con a capo nello script. Assicurarsi che #!/usr/bin/env node sia seguito da \n (stile unix) anziché \r\n (stile windows/dos). Per rimediare, utilizzare il comando tr per rimuovere \r 's dal file:

cat your_script.js | tr -d '\r' > fixed_script.js 
+0

ho corretto la mia risposta e ha aggiunto un esempio fissare –

+0

ho provato il vostro comando, ma è non funziona quando eseguo di nuovo il mio comando. Non ho una nuova riga dopo la prima riga dal mio script nodo. Dai un'occhiata al mio primo post. – PauloDev

5

Si potrebbe anche usare vim:

vim script 

:se ff=unix 
:wq 

che confermerà a capo in stile DOS a fine riga in stile Unix.

0

Come già detto in precedenza da PauloDev, si tratta di un problema di terminazione di linea per Mac/Windows. Elaborare, se si utilizza nvm è necessario individuare il primo script (nel mio caso sto usando express-mvc-generator):

# install dos2unix 
brew install dos2unix 

# output the full path of your node version 
which node 
>> /Users/owmundy/.nvm/versions/node/v8.0.0/bin/node 

# confirm the file path 
cat /Users/<username>/.nvm/versions/node/v8.0.0/lib/node_modules/express-mvc-generator/bin/express 

# convert the line endings 
sudo dos2unix /Users/<username>/.nvm/versions/node/v8.0.0/lib/node_modules/express-mvc-generator/bin/express 

# then run your script 
Problemi correlati