2013-02-04 3 views
12

Viene visualizzato un errore strano dopo l'esecuzione di npm run-script grunt in cui mi risulta che node_modules/.bin/grunt non riesce.Perché Grunt fallisce?

Sto seguendo un tutorial come im abbastanza nuovo per Backbone (http://dailyjs.com/2012/11/29/backbone-tutorial-1/),

Ecco il mio file package.json.

{ 
    "name": "btask" 
, "version": "0.0.1" 
, "private": true 
, "dependencies": { 
    "requirejs": "latest" 
    , "connect": "2.7.0" 
    } 
, "devDependencies": { 
    "mocha": "latest" 
    , "chai": "latest" 
    , "grunt": "latest" 
    , "grunt-exec": "latest" 
    } 
, "scripts": { 
    "grunt": "node_modules/.bin/grunt" 
    } 
} 

Ed ecco una trascrizione completa dell'errore.

0 info it worked if it ends with ok 
1 verbose cli [ 'node', 
1 verbose cli '/Users/Keva161/.nvm/v0.8.18/bin/npm', 
1 verbose cli 'run-script', 
1 verbose cli 'grunt' ] 
2 info using [email protected] 
3 info using [email protected] 
4 verbose read json /Users/Keva161/Documents/Web Dev/Webapps/Node/btask/package.json 
5 verbose run-script [ 'pregrunt', 'grunt', 'postgrunt' ] 
6 info pregrunt [email protected] 
7 info grunt [email protected] 
8 verbose unsafe-perm in lifecycle true 
9 silly exec sh "-c" "node_modules/.bin/grunt" 
10 silly sh,-c,node_modules/.bin/grunt,/Users/Keva161/Documents/Web Dev/Webapps/Node/btask spawning 
11 info [email protected] Failed to exec grunt script 
12 error [email protected] grunt: `node_modules/.bin/grunt` 
12 error `sh "-c" "node_modules/.bin/grunt"` failed with 2 
13 error Failed at the [email protected] grunt script. 
13 error This is most likely a problem with the btask package, 
13 error not with npm itself. 
13 error Tell the author that this fails on your system: 
13 error  node_modules/.bin/grunt 
13 error You can get their info via: 
13 error  npm owner ls btask 
13 error There is likely additional logging output above. 
14 error System Darwin 12.2.1 
15 error command "node" "/Users/Keva161/.nvm/v0.8.18/bin/npm" "run-script" "grunt" 
16 error cwd /Users/Keva161/Documents/Web Dev/Webapps/Node/btask 
17 error node -v v0.8.18 
18 error npm -v 1.2.4 
19 error code ELIFECYCLE 
20 verbose exit [ 1, true ] 
+0

Sei su Windows? Ho avuto problemi con grunt su Windows con quella configurazione ... – Ingro

+0

no im su osx:/ive ha provato anche il grunt installato a livello globale ma lo stesso errore – Keva161

+1

Non penso che sia il tuo caso ma ho dovuto cambiare la sezione "scripts" di package.json a questo per funzionare su Windows: '" grunt ":" node_modules \\. bin \\ grunt "' – Ingro

risposta

2

Sto usando grugnito e NPM per un po ', e non ho mai usato run_script. Forse provarlo?

Il scripts porzione è generalmente per l'esecuzione su un server remoto, (cioè Heroku o Travis)


Rimuovere il blocco scripts.

Poi fare

npm install -g grunt 

potrebbe essere necessario riavviare terminale dopo questo.

cd myproject 
npm install 
grunt mytask 
21

Il tutorial di cui si sta parlando utilizza grunt 0.3. Grunt ha aggiornato da allora e se si utilizza "grunt": "latest" nel file package.json, si otterrà automaticamente il valore di 0.4.

È possibile passare attraverso il migration guide per far funzionare le cose.

Al fine di ottenere solo grugnito di lavoro per il tutorial è possibile farlo -

  • installare grugnito-cli globalmente npm install -g grunt-cli
  • Installa grugnito-init globalmente npm install -g grunt-init
  • Installare grugnito a livello locale (già installato se hai seguito il tutorial)
  • Cambia "grunt": "node_modules\\.bin\\grunt" in package.json a "grunt": "grunt"
  • Rinominare grunt.js nella directory principale per Gruntfile.js
  • Variazione grunt.registerTask('default', 'exec copy-require'); in Gruntfile.js-grunt.registerTask('default', ['exec','copy-require']);
  • Run npm run-script grunt come al solito in-linea di comando. Le cose dovrebbero funzionare bene ora.

Si otterrà una directory di build con r.js build.

Se ancora non è possibile farlo funzionare in qualche modo con i passaggi precedenti, è possibile modificare grunt: "latest"-grunt : "0.3" nel file package.json ed eseguire npm install in guscio.

+1

Che cos'è 'grunt-init' e perché è necessario? – levi

+1

Grunt init è uno strumento di scaffold per generare automaticamente il file grunt e la struttura di altri progetti. (come yeoman). Non è affatto necessario. Maggiori informazioni qui http://gruntjs.com/project-scaffolding – arunkjn

+0

dove si trova la radice del grunt globale? – Omar

5

arunkjn La risposta risolverà il problema. Sebbene in conformità con l'intenzione del tutorial, l'autore non ha voluto installare grunt a livello globale, che è anche quello che sto cercando. Grazie a arunkjn, ho pensato che si potrebbe anche:

  • Installare grugnito-cli localmente da npm install grunt-cli
  • Rinomina grunt.js nella directory root per Gruntfile.js
  • Variazione grunt.registerTask('default', 'exec copy-require'); in Gruntfile.js a grunt.registerTask('default', ['exec','copy-require']);

E fare di nuovo npm run-script grunt e dovrebbe funzionare.

+0

** Grunt-cli ** e ** grunt-init ** sono pensati per essere installati globalmente. Vedi punto 2 [qui] (https://github.com/) gruntjs/grunt/wiki/Aggiornamento da 0.3 a 0.4) per i dettagli. Nella mia risposta sopra ho esplicitamente menzionato che devi installare localmente grunt perché funzioni (e questo è ciò che l'autore intende fare). – arunkjn

+1

Sì, so che dovrebbero essere globalmente. Ma l'autore del tutorial voleva che tutto fosse locale, solo il suo stile supponevo. Solo una preferenza – owyongsk

+2

In generale, sono solidale con l'autore perché mi piace usare gli strumenti localmente a meno che non sappia che lo userò regolarmente. Penso che l'installazione locale mantenga lo spirito del tutorial - installando globalmente * e poi * localmente tipi di sconfitte allo scopo. +1 per quello e una risposta semplice. – chris