Package de nœud (Grunt) installé mais non disponible

187

J'essaie de créer une bibliothèque github jquery-ui en utilisant grunt, mais après l'exécution, npm installje ne peux toujours pas exécuter la commande en fonction du fichier readme . Cela donne juste No command 'grunt' found:

james@ubuntu:~/Documents/projects/ad2/lib/jquery-ui$ grunt build
No command 'grunt' found, did you mean:
 Command 'grun' from package 'grun' (universe)
grunt: command not found
james@ubuntu:~/Documents/projects/ad2/lib/jquery-ui$ npm ls
jquery-ui@1.9.0pre /home/james/Documents/projects/ad2/lib/jquery-ui
├─┬ grunt@0.3.9 
 ├── async@0.1.18 
 ├── colors@0.6.0-1 
 ├─┬ connect@1.8.7 
  ├── formidable@1.0.9 
  ├── mime@1.2.5 
  └── qs@0.5.0 
 ├── dateformat@1.0.2-1.2.3 
 ├─┬ glob-whatev@0.1.6 
  └─┬ minimatch@0.2.4 
    └── lru-cache@1.0.6 
 ├─┬ gzip-js@0.3.1 
  ├── crc32@0.2.2 
  └── deflate-js@0.2.2 
 ├── hooker@0.2.3 
 ├─┬ jshint@0.5.9 
  ├── argsparser@0.0.6 
  └─┬ minimatch@0.2.4 
    └── lru-cache@1.0.6 
 ├─┬ nodeunit@0.6.4 
  ├── tap-assert@0.0.10 
  └─┬ tap-producer@0.0.1 
    ├── inherits@1.0.0 
    ├── tap-results@0.0.2 
    └── yamlish@0.0.5 
 ├─┬ nopt@1.0.10 
  └── abbrev@1.0.3 
 ├─┬ prompt@0.1.12 
  ├── pkginfo@0.2.3 
  └─┬ winston@0.5.11 
    ├── eyes@0.1.7 
    ├─┬ loggly@0.3.11 
     └── timespan@2.2.0 
    └── stack-trace@0.0.6 
 ├── semver@1.0.13 
 ├─┬ temporary@0.0.2 
  └── package@1.0.0 
 ├── uglify-js@1.0.7 
 ├── underscore@1.2.4 
 └── underscore.string@2.1.1 
├── grunt-compare-size@0.1.4 
├─┬ grunt-css@0.2.0 
 ├── csslint@0.9.8 
 └── sqwish@0.2.0 
├── grunt-html@0.1.1 
├── request@2.9.153 
├─┬ rimraf@2.0.1 
 └── graceful-fs@1.1.8 
└─┬ testswarm@0.2.2 
  └── request@2.9.202 

Je suis confus, que me manque-t-il s'il vous plaît?

AJP
la source

Réponses:

412

Les outils de ligne de commande ne sont pas inclus avec la dernière version de Grunt (0.4 au moment de l'écriture) mais vous devez les installer séparément.

C'est une bonne idée car cela signifie que vous pouvez avoir différentes versions de Grunt en cours d'exécution sur différents projets, tout en utilisant la jolie gruntcommande concise pour les exécuter.

Alors installez d'abord les outils cli grunt globalement:

npm install -g grunt-cli

(ou éventuellement sudo npm install -g grunt-cli).

Vous pouvez établir que cela fonctionne en tapant grunt --version

Vous pouvez maintenant installer la version actuelle de Grunt local dans votre projet. Donc, depuis l'emplacement de votre projet ...

npm install grunt --save-dev

Le save-devcommutateur n'est pas strictement nécessaire mais est une bonne idée car il marquera grunt dans sa section package.json devDependencies comme un module de développement uniquement.

Tom P
la source
5
Je n'ai pas pu trouver le chemin du dossier grunt dans les variables système du chemin après avoir exécuté npm install -g grunt-cli
singsuyash
10
dû courir en utilisant sudo
Phil Hudson
2
Si cela ne fonctionne pas pour vous, essayez de désinstaller grunt et grunt-cli, puis recommencez. Ne fonctionne pour moi que si j'utilise sudoMerci Tom!
Termato le
Remarque: si vous devez utiliser sudo, cela dépend de la configuration du nœud. Ce n'est pas idéal mais peut être corrigé. sindresorhus suggère une solution . Je préfère utiliser NVM (gestionnaire de version de nœud)
Tom P
1
Si vous êtes ici et que vous cliquez node not foundaprès avoir exécuté la commande ci-dessus et que vous avez utilisé le gestionnaire de paquets pour installer le nœud, vous devez également sudo ln -s /usr/local/bin/nodejs /usr/local/bin/node
créer un
26

Ajoutez /usr/local/share/npm/bin/à votre$PATH

Sam Figueroa
la source
Merci, l'ajout de ceci à mon .bash_profile a aidé à résoudre mon problème!
Thilak Rao
2
l'ajout a $HOME/npm/binfonctionné pour moi sur ubuntu 13.10.
Eliran Malka
24

Si vous avez installé le paquet Grunt en exécutant npm install -g gruntet qu'il dit toujours No command 'grunt' foundou grunt: command not found, un moyen rapide et sale de faire fonctionner cela consiste à lier manuellement les binaires des nœuds à votre $ PATH.

Sous MacOSX / Linux, vous pouvez ajouter cette ligne à votre fichier ~/.bash_profileou ~/.bashrc.

PATH=$PATH:/usr/local/Cellar/node/HEAD/bin # Add NPM binaries

Vous devriez probablement remplacer /usr/local/Cellar/node/HEAD/binpar le chemin où vos binaires de nœuds peuvent être trouvés.

Si c'est rapide et sale pour moi, c'est parce que tout devrait fonctionner sans cela, mais pour une raison inconnue, un lien semble rompu. Comme personne sur IRC ne pouvait me dire pourquoi cela s'était produit, j'ai trouvé ma propre façon de le faire fonctionner (grognement).

PS: Cela devrait vous aider à faire des grognements, cette réponse n'est pas liée à jquery-ui.

Mise à jour 02/2013 : Vous devriez jeter un œil à la réponse de @ tom-p qui explique mieux ce qui se passe. Tom nous donne la vraie solution au lieu de piratage de votre bashrc: les deux doivent travailler, mais vous devriez essayer d' installer d' grunt-cliabord .

Rayfranco
la source
Voir l'autre réponse - qui fournit l'explication.
Yugal Jindle
Pouvez-vous voir quelle cave se trouve ici? Est-ce quelque chose de spécifique à vous / à votre installation?
Brian C
12

Dans mon cas, j'ai besoin de modifier le fichier / usr / local / bin / grunt à la ligne 1 (ne faites pas cela):

 #!/usr/bin/env node //remove this line
 #!/usr/bin/env nodejs // and put this line to run with nodejs

Édité:

Pour éviter les problèmes, j'ai créé un lien avec le nom de "node" car de nombreux autres programmes utilisent encore la commande "node".

 sudo ln -s /usr/bin/nodejs /usr/sbin/node
Edgard Leal
la source
6
Un vote favorable constructif pour dissuader quiconque de modifier manuellement les fichiers packagés. Pour votre problème, vous devez apt-get install nodejs-legacy.
Diffusion
Votre suggestion est l'une des plus récentes et des seules suggestions qui ont fonctionné sur ma toute nouvelle installation de Debian Jessie.
Helzgate
Ok Air, mais j'utilise OSX, je vais essayer quelque chose commebrew install nodejs-leacy
Edgard Leal
@Air merci, c'était mon problème. Après avoir suivi toutes les étapes précédentes, il n'a pas pu reconnaître le grognement .
kemicofa ghost
11

Il existe une autre façon d'exécuter grunt sur Windows, sans rien ajouter de manière globale. C'est un cas où vous n'avez rien à faire avec% PATH%

si vous avez installé grunt et grunt-cli (sans le commutateur -g). Soit par:

npm install grunt-cli
npm install grunt@0.4.5

Ou en ayant cela dans votre fichier packages.json comme:

"devDependencies": {
    "grunt-cli": "^1.2.0",
    "grunt": "^0.4.5",

Vous pouvez appeler grunt depuis votre installation locale en:

node node_modules\grunt-cli\bin\grunt --version

C'est une solution pour ceux qui, pour certaines raisons, ne veulent pas ou ne peuvent pas jouer avec PATH, ou ont quelque chose d'autre qui le dérange tout le temps, par exemple sur un agent de construction.

Edit: Ajout de versions car le grunt-cli fonctionne avec grunt> 0.3

Tomajar
la source
Quelqu'un qui utilise docker peut le trouver utile.
Daniel Kmak
11

Sur WIN7, j'ai dû ajouter manuellement le chemin d'accès au dossier npm (qui contient le fichier insaisissable «grunt») à la variable d'environnement Windows PATH.
Dans mon cas, c'étaitC:\Users\mhaagsma\AppData\Roaming\npm

Marvin
la source
2

La bonne façon d'installer grunt est d'exécuter cette commande:

npm install grunt -g

(Ajoutez «sudo» à la commande ci-dessus si vous obtenez un message d'erreur EACCESS)

-g obligera npm à installer le paquet globalement, vous pourrez donc l'utiliser quand vous le souhaitez sur votre machine actuelle.

Adonis K. Kakoulidis
la source
6
Notez que si vous faites cela (je viens de tester), gruntéchouera toujours car le paquet grunt n'inclut aucun outil de ligne de commande. Vous avez besoin grunt-cli.
Diffusion
3
apparemment, vous avez besoin à la fois du local et du mondial
Adonis K. Kakoulidis
1
installation globale (pour les besoins en ligne de commande), installation locale pour les besoins de type "require (peu importe)". Vous devez donc faire les deux. Merci de votre aide!
prograhammer
1

Bonjour j'ai eu ce problème sur mac, et ce que j'ai fait était

installé globalement et préfixe avec chemin global

sudo npm install grunt -g --prefix=/usr/local

maintenant $ which grunt

devrait sortir /usr/local/bin/grunt

À votre santé

Theva
la source
0

Parfois, vous devez le faire npm install package_name -gpour que cela fonctionne.

touche inférieure
la source
Merci d'avoir répondu. J'ai trouvé une manière différente de faire ce que j'essayais de faire.
AJP
@AJP pouvez-vous nous dire comment vous le faites fonctionner, au lieu de simplement nous dire que vous l'avez fait? Merci.
rayfranco
@rayfranco désolé, j'ai essentiellement contourné le problème en abandonnant ... Je pense que nous essayions peut-être de créer la bibliothèque jquery-ui, alors nous venons de la télécharger, je ne m'en souviens pas vraiment maintenant ... Désolé, je sais que ce n'est pas utile , veuillez renvoyer la solution lorsque vous la trouvez. On dirait que beaucoup d'autres sont venus sur cette page (sans aucun succès).
AJP
0

Une autre solution consiste à supprimer le bundler ubuntu dans mon cas où j'ai utilisé:

sudo apt-get remove ruby-bundler 

Cela a fonctionné pour moi.

Israël Morales
la source
0

Sous Windows, une partie du mystère semble être l'endroit où npm installe le fichier Grunt.cmd. Alors que sur ma machine Linux, je devais juste exécuter sudo npm install -g grunt-cli, sur mon ordinateur portable de travail Windows 8, Grunt a été placé dans le répertoire '.npm-global':% USER_HOME% \. Npm-global et je dû ajouter cela au chemin.

Donc, sur Windows, mes étapes étaient:

  • npm installer -g grunt-cli

  • déterminer où était le diable grunt.cmd (je suppose que pour certains, il se trouve dans% USER_HOME% \ App_Data \ Roaming)

  • Ajout de l'emplacement à ma variable d'environnement Path. Ouverture d'une nouvelle invite cmd et la commande grunt s'est bien déroulée.

MattC
la source
0

Sur Windows 10, ajoutez ceci à votre chemin:

%APPDATA%\npm

Cela fait référence au dossier ~/AppData/Roaming/npm

[Suppose que vous avez déjà exécuté npm install -g grunt-cli]

jomofrodo
la source