Пакет Node (Grunt) установлен, но недоступен

187

Я пытаюсь построить библиотеку GitHub JQuery-UI с помощью grunt, но после запуска npm installя до сих пор не могу выполнить команду в соответствии с файлом риого . Это просто дает 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 

Я в замешательстве, чего мне не хватает, пожалуйста?

AJP
источник

Ответы:

412

Инструменты командной строки не включены в последнюю версию Grunt (0.4 на момент написания), вместо этого вам необходимо установить их отдельно.

Это хорошая идея, потому что это означает, что у вас могут быть разные версии Grunt, работающие в разных проектах, но при этом вы можете использовать хорошую лаконичную gruntкоманду для их запуска.

Итак, сначала установите глобальные инструменты Cli:

npm install -g grunt-cli

(или возможно sudo npm install -g grunt-cli).

Вы можете установить, что работает, набрав grunt --version

Теперь вы можете установить текущую версию Grunt local для вашего проекта. Так что из местоположения вашего проекта ...

npm install grunt --save-dev

save-devВыключатель не является строго необходимым , но это хорошая идея , потому что это будет означать хрюкать в package.json devDependencies разделе как развитие только модуль.

Том П
источник
5
Я не смог найти путь к папке grunt в системных переменных Path после запуска npm install -g grunt-
cli
10
пришлось бежать, используя sudo
Фил Хадсон
2
Если это не работает для вас, попробуйте удалить grunt и grunt-cli, а затем повторите попытку. Работает только для меня, если я использую sudoСпасибо, Том!
Termato
Примечание. Если вам нужно использовать sudo, это связано с настройкой узла. Это не идеально, но можно исправить. Синдресор предлагает один путь . Я предпочитаю использовать NVM (менеджер версий узлов)
Том П
1
Если вы здесь и нажали node not foundпосле запуска вышеуказанной команды и использовали менеджер пакетов для установки узла, то вам также понадобится символическая ссылкаsudo ln -s /usr/local/bin/nodejs /usr/local/bin/node
anon58192932
26

Добавьте /usr/local/share/npm/bin/к вашему$PATH

Сэм Фигероа
источник
Спасибо, добавление этого в мой .bash_profile помогло решить мою проблему!
Тилак Рао
2
добавление $HOME/npm/binработало для меня на Ubuntu 13.10.
Элиран Малка
24

Если вы установили пакет Grunt, запустив npm install -g gruntего, и он все еще говорит « No command 'grunt' foundили» grunt: command not found, быстрый и грязный способ получить эту работу - вручную связать двоичные файлы узла с вашим $ PATH.

В MacOSX / Linux вы можете добавить эту строку в ваш файл ~/.bash_profileили ~/.bashrcфайл.

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

Возможно, вам следует заменить /usr/local/Cellar/node/HEAD/binпуть, по которому можно найти двоичные файлы вашего узла.

Если это быстро и грязно для меня, это потому, что все должно работать без этого, но по неизвестной причине ссылка кажется неработающей. Поскольку никто в IRC не мог сказать мне, почему это произошло, я нашел свой собственный способ заставить его (ворчать) работать.

PS: Это должно помочь вам сделать ворчание, этот ответ не связан с jquery-ui.

Обновление 02/2013 : вы должны взглянуть на ответ @ tom-p, который лучше объясняет, что происходит. Том дает нам реальное решение вместо того, чтобы взламывать ваш файл bashrc: оба должны работать, но вы должны grunt-cliсначала попытаться установить .

rayfranco
источник
Смотрите другой ответ - это дает объяснение.
Югаль Джиндл
Можете ли вы уточнить, что здесь находится погреб? Это что-то конкретное для вас / вашей установки?
Брайан К.
12

В моем случае мне нужно изменить файл / usr / local / bin / grunt в строке 1 (не делайте этого):

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

Отредактировано:

Чтобы избежать проблем, я создал ссылку с именем «узел», потому что многие другие программы все еще используют команду «узел».

 sudo ln -s /usr/bin/nodejs /usr/sbin/node
Эдгард Лил
источник
6
Конструктивный downvote, чтобы отговорить кого-либо от ручного редактирования упакованных файлов. Для вашей проблемы вам нужно apt-get install nodejs-legacy.
эфир
Ваше предложение является одним из самых новых и единственных предложений, которые работали над моей новой установкой Debian Jessie.
Хельзгейт
Ok Air, но я использую OSX, попробую что-нибудь вродеbrew install nodejs-leacy
Эдгард Лил
@ Воздушное спасибо, это была моя проблема. Выполнив все предыдущие шаги, он не смог распознать хрюканье .
призрак kemicofa
11

Есть еще один способ запустить grunt для Windows, не добавляя ничего глобально. Это тот случай, когда вам не нужно ничего делать с% PATH%

если у вас установлен grunt и grunt-cli (без ключа -g). Либо

npm install grunt-cli
npm install grunt@0.4.5

Или имея это в вашем файле packages.json, например:

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

Вы можете вызвать grunt из вашей локальной системы:

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

Это решение для тех, кто по каким-то причинам не хочет или не может играть с PATH, или ему постоянно что-то мешает, например, на агенте сборки.

Изменить: Добавлены версии, как работает grunt-cli с grunt> 0.3

tomajar
источник
Кто-то, использующий докер, может найти это полезным.
Даниэль Кмак
11

На WIN7 мне пришлось вручную добавить путь к папке npm (которая содержит неуловимый файл grunt) в переменную окружения PATH Windows.
В моем случае это былоC:\Users\mhaagsma\AppData\Roaming\npm

Marvin
источник
2

Правильный способ установить grunt - запустить эту команду:

npm install grunt -g

(Добавьте «sudo» к приведенной выше команде, если вы получите сообщение об ошибке EACCESS)

-g заставит npm установить пакет глобально, так что вы сможете использовать его, когда захотите, на своем текущем компьютере.

Адонис К. Какулидис
источник
6
Обратите внимание, что если вы сделаете это (я только что проверил), gruntвсе равно не получится, потому что пакет grunt не содержит никаких инструментов командной строки. Вам нужно grunt-cli.
эфир
3
Видимо, нужны как локальные, так и глобальные
Адонис К. Какоулидис
1
глобальная установка (для нужд командной строки), локальная установка для нужд типа «требуется (что угодно)». Так что вам нужно сделать оба. Спасибо за вашу помощь!
программер
1

Здравствуйте, у меня была эта проблема на Mac, и то, что я сделал, было

установлен глобально и префикс с глобальным путем

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

сейчас $ which grunt

должен положить /usr/local/bin/grunt

ура

Theva
источник
0

Иногда нужно, чтобы npm install package_name -gэто работало.

lowerkey
источник
Спасибо за ответ. Я нашел другой путь вокруг того, что я пытался сделать.
AJP
@AJP, не могли бы вы рассказать нам, как вы это делаете, вместо того, чтобы просто сказать нам, что сделали? Спасибо.
Rayfranco
@rayfranco извините, я в основном обошел это, отказавшись ... Я думаю, что мы пытались создать библиотеку jquery-ui, возможно, поэтому мы только что загрузили ее, хотя сейчас не могу вспомнить ... Извините, я знаю, что это бесполезно Пожалуйста, отправьте обратно решение, когда вы найдете его. Похоже, что многие другие пришли на эту страницу (без какого-либо успеха).
AJP
0

Другое решение состоит в том, чтобы удалить упаковщик Ubuntu в моем случае, который я использовал:

sudo apt-get remove ruby-bundler 

Это сработало для меня.

Израиль Моралес
источник
0

В Windows часть загадки заключается в том, что npm устанавливает файл Grunt.cmd. На моем компьютере с Linux мне просто нужно было запустить sudo npm install -g grunt-cli, на моем рабочем ноутбуке с Windows 8 Grunt был помещен в каталог .npm-global:% USER_HOME% \. Npm-global, и я должен был добавить это к Пути.

Так что на Windows мои шаги были:

  • npm install -g grunt-cli

  • выяснить, где, черт возьми, был grunt.cmd (наверное, для некоторых он находится в% USER_HOME% \ App_Data \ Roaming)

  • Добавил местоположение в мою переменную окружения Path. Открыл новое приглашение cmd и команда grunt работала нормально.

MattC
источник
0

В Windows 10 добавьте это в свой путь:

%APPDATA%\npm

Это относится к папке ~/AppData/Roaming/npm

[Предполагается, что вы уже бежали npm install -g grunt-cli]

jomofrodo
источник