Paquete de nodos (Grunt) instalado pero no disponible

187

Estoy tratando de construir una biblioteca github jquery-ui usando grunt, pero después de ejecutar npm installtodavía no puedo ejecutar el comando de acuerdo con el archivo Léame . Solo da 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 

Estoy confundido, ¿qué me estoy perdiendo por favor?

AJP
fuente

Respuestas:

412

Las herramientas de línea de comandos no se incluyen con la última versión de Grunt (0.4 en el momento de la escritura), sino que debe instalarlas por separado.

Esta es una buena idea porque significa que puede tener diferentes versiones de Grunt ejecutándose en diferentes proyectos, pero aún así usar el gruntcomando conciso para ejecutarlos.

Así que primero instale las herramientas de grunt cli a nivel mundial:

npm install -g grunt-cli

(o posiblemente sudo npm install -g grunt-cli).

Puede establecer que está funcionando escribiendo grunt --version

Ahora puede instalar la versión actual de Grunt local en su proyecto. Entonces, desde la ubicación de su proyecto ...

npm install grunt --save-dev

El save-devcambio no es estrictamente necesario, pero es una buena idea porque marcará el gruñido en su sección package.json devDependencies como un módulo de solo desarrollo.

Tom P
fuente
55
No pude encontrar la ruta de la carpeta grunt en las Variables del sistema de ruta después de ejecutar npm install -g grunt-cli
singsuyash
10
tuvo que correr usando sudo
Phil Hudson
2
Si esto no funciona para usted, intente desinstalar grunt y grunt-cli y luego vuelva a hacerlo. Solo funciona para mí si uso ¡ sudoGracias Tom!
Termato
Nota: Si tiene que usar sudo, eso tiene que ver con cómo tiene la configuración de nodo. No es ideal pero se puede arreglar. sindresorhus sugiere una forma . Prefiero usar NVM (administrador de versión de nodo)
Tom P
1
Si está aquí y golpea node not founddespués de ejecutar el comando anterior y usó el administrador de paquetes para instalar el nodo, entonces también necesita un enlace simbólicosudo ln -s /usr/local/bin/nodejs /usr/local/bin/node
anon58192932
26

Añadir /usr/local/share/npm/bin/a tu$PATH

Sam Figueroa
fuente
¡Gracias, agregar esto a mi .bash_profile ayudó a solucionar mi problema!
Thilak Rao
2
agregar $HOME/npm/binfuncionó para mí en ubuntu 13.10.
Eliran Malka
24

Si instaló el paquete Grunt ejecutando npm install -g grunty todavía dice No command 'grunt' foundo grunt: command not found, una forma rápida y sucia de hacer que esto funcione es vincular manualmente los binarios de nodo a su $ PATH.

En MacOSX / Linux puede añadir esta línea a su ~/.bash_profileo ~/.bashrcarchivo.

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

Probablemente debería reemplazar /usr/local/Cellar/node/HEAD/binpor la ruta donde se pueden encontrar sus binarios de nodo.

Si esto es rápido y sucio para mí, es porque todo debería funcionar sin hacerlo, pero por una razón desconocida, un enlace parece estar roto. Como nadie en IRC podía decirme por qué sucedió esto, encontré mi propia manera de hacerlo funcionar (gruñir).

PD: Esto debería ayudarte a hacer que el gruñido funcione, esta respuesta no está relacionada con jquery-ui.

Actualización 02/2013 : debería echar un vistazo a la respuesta de @ tom-p que explica mejor lo que está sucediendo. Tom nos da la solución real en lugar de hackear tu archivo bashrc: ambos deberían funcionar, pero debes intentar instalar grunt-cliprimero .

rayfranco
fuente
Vea la otra respuesta, que proporciona la explicación.
Yugal Jindle
¿Puedes aclarar qué Bodega hay aquí? ¿Es esto algo específico para usted / su instalación?
Brian C
12

En mi caso, necesito modificar el archivo / usr / local / bin / grunt en la línea 1 (no haga esto):

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

Editado:

Para evitar problemas, creé un enlace con el nombre de "nodo" porque muchos otros programas todavía usan el comando "nodo".

 sudo ln -s /usr/bin/nodejs /usr/sbin/node
Edgard Leal
fuente
66
Voto negativo constructivo para disuadir a cualquiera de editar manualmente los archivos empaquetados. Para su problema lo necesita apt-get install nodejs-legacy.
Aire
Su sugerencia es una de las nuevas y únicas sugerencias que funcionó en mi nueva instalación de Debian Jessie.
Helzgate
Ok Air, pero estoy usando OSX, intentaré algo comobrew install nodejs-leacy
Edgard Leal
@ Air gracias, ese fue mi problema. Después de seguir todos los pasos anteriores, no pudo reconocer el gruñido .
kemicofa fantasma
11

Hay una forma más de ejecutar gruñido en Windows, sin agregar nada a nivel mundial. Este es un caso en el que no tiene que hacer nada con% PATH%

si tiene instalado grunt y grunt-cli (sin el interruptor -g). Ya sea por:

npm install grunt-cli
npm install grunt@0.4.5

O al tener eso en su archivo packages.json como:

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

Puede llamar a gruñido desde su instalación local:

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

Esta es una solución para aquellos que por alguna razón no quieren o no pueden jugar con PATH, o tienen algo más que lo estropea todo el tiempo, por ejemplo, en un agente de compilación.

Editar: Versiones agregadas ya que grunt-cli funciona con grunt> 0.3

tomajar
fuente
Alguien que use docker podría encontrarlo útil.
Daniel Kmak
11

En WIN7 tuve que agregar manualmente la ruta a la carpeta npm (que contiene el elusivo archivo 'gruñido') a la variable de entorno PATH de Windows.
En mi caso eso fueC:\Users\mhaagsma\AppData\Roaming\npm

Marvin
fuente
2

La forma correcta de instalar grunt es ejecutando este comando:

npm install grunt -g

(Anteponga "sudo" al comando anterior si recibe un mensaje de error EACCESS)

-g hará que npm instale el paquete globalmente, por lo que podrá usarlo cuando lo desee en su máquina actual.

Adonis K. Kakoulidis
fuente
66
Tenga en cuenta que si hace esto (acabo de probar), grunttodavía fallará porque el paquete de gruñido no incluye ninguna herramienta de línea de comandos. Es necesario grunt-cli.
Emisión
3
aparentemente, necesitas tanto lo local como lo global
Adonis K. Kakoulidis
1
instalación global (para necesidades de línea de comandos), instalación local para necesidades de tipo "requerir (lo que sea)". Entonces necesitas hacer ambas cosas. ¡Gracias por tu ayuda!
prograhammer
1

Hola, tuve este problema en Mac, y lo que hice fue

instalado globalmente y prefijo con ruta global

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

ahora $ which grunt

debería poner fuera /usr/local/bin/grunt

Salud

Theva
fuente
0

A veces tienes que hacerlo npm install package_name -gpara que funcione.

clave inferior
fuente
Gracias por la respuesta. He encontrado una forma diferente de lo que estaba tratando de hacer.
AJP
@AJP, ¿podría decirnos cómo lo hace funcionar, en lugar de decirnos que lo hizo? Gracias.
rayfranco
@rayfranco, lo siento, básicamente lo solucioné dándome por vencido ... Creo que estábamos tratando de hacer la biblioteca jquery-ui tal vez, así que acabamos de descargarla, aunque realmente no puedo recordar ahora ... Lo siento, sé que eso no es útil , vuelva a publicar la solución cuando la encuentre. Parece que muchos otros han venido a esta página (sin ningún éxito).
AJP
0

Otra solución es eliminar el paquete de Ubuntu en mi caso que utilicé:

sudo apt-get remove ruby-bundler 

Eso funcionó para mí.

Israel Morales
fuente
0

En Windows, parte del misterio parece ser donde npm instala el archivo Grunt.cmd. Mientras estaba en mi Linux box, solo tenía que ejecutar sudo npm install -g grunt-cli, en mi computadora portátil de trabajo con Windows 8, Grunt se colocó en el directorio '.npm-global':% USER_HOME% \. Npm-global y yo tuvo que agregar eso al Camino.

Entonces en Windows mis pasos fueron:

  • npm install -g grunt-cli

  • averiguar dónde estaba el heck grunt.cmd (supongo que para algunos está en% USER_HOME% \ App_Data \ Roaming)

  • Agregué la ubicación a mi variable de entorno Path. Abrió un nuevo indicador de cmd y el comando gruñido funcionó bien.

MattC
fuente
0

En Windows 10, agregue esto a su ruta:

%APPDATA%\npm

Esto hace referencia a la carpeta ~/AppData/Roaming/npm

[Asume que ya has corrido npm install -g grunt-cli]

jomofrodo
fuente