已安装节点软件包(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 

我很困惑,我想念的是什么?

Answers:


412

最新版本的Grunt(撰写本文时为0.4)不包含命令行工具,而是您需要单独安装它们。

这是一个好主意,因为这意味着您可以在不同的项目上运行不同版本的Grunt,但是仍然可以使用简洁的grunt命令来运行它们。

因此,首先在全球范围内安装grunt cli工具:

npm install -g grunt-cli

(或可能sudo npm install -g grunt-cli)。

您可以通过输入以下内容来确定其是否有效 grunt --version

现在您可以在项目中安装当前版本的Grunt。因此,从您项目的位置...

npm install grunt --save-dev

save-dev开关是不是绝对必要的,但是是一个好主意,因为它会在其的package.json devDependencies部分作为经营的唯一模块标记咕噜。


5
运行npm install -g grunt-cli后,我在路径系统变量中找不到grunt文件夹路径
singsuyash 2014年

10
必须使用sudo运行
Phil Hudson

2
如果这对您不起作用,请尝试卸载grunt和grunt-cli,然后再次进行。仅在我使用“ sudo谢谢汤姆”的情况下对我有用。
Termato '16

注意:如果必须使用sudo,则与如何设置节点有关。这不是理想的,但可以修复。sindresorhus提出了一种方法。我更喜欢使用NVM(节点版本管理器)
Tom P

1
如果您在这里,并且node not found在运行上述命令后命中,并且使用包管理器安装了节点,则还需要进行符号链接sudo ln -s /usr/local/bin/nodejs /usr/local/bin/node
anon58192932,2015年


24

如果您确实是通过运行安装了Grunt软件包的,npm install -g grunt并且仍然显示No command 'grunt' foundgrunt: 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:这应该可以帮助您使咕unt声工作,此答案与jquery-ui无关。

2013年2月2日更新:您应该查看@ tom-p的答案,该答案可以更好地说明发生了什么。汤姆给了我们真正的解决方案,而不是黑客你的.bashrc文件:既要工作,但你应该尝试安装grunt-cli第一


查看其他答案-提供说明。
Yugal Jindle

你能讲一下这里的酒窖吗?这是您/您的安装所特有的吗?
Brian C

12

就我而言,我需要在第1行中修改文件/ usr / local / bin / grunt(不要这样做):

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

编辑:

为了避免出现问题,我创建了一个名为“ node”的链接,因为许多其他程序仍使用“ node”命令。

 sudo ln -s /usr/bin/nodejs /usr/sbin/node

6
富有建设性的不赞成投票,以阻止任何人手动编辑打包的文件。对于您的问题,您需要apt-get install nodejs-legacy
航空

您的建议是对我全新安装的Debian Jessie所做的最新建议之一。
赫尔兹盖特2015年

好空气,但我使用OSX,我会尝试一些东西一样brew install nodejs-leacy
Edgard莱亚尔

@Air谢谢,那是我的问题。遵循所有前面的步骤后,它无法识别出grunt
kemicofa ghost

11

还有一种在Windows上运行grunt的方法,而无需全局添加任何内容。在这种情况下,您不必使用%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一起工作,添加了版本


使用docker的人可能会发现它很有用。
Daniel Kmak

11

在WIN7上,我必须手动将npm文件夹(包含难以捉摸的“ grunt”文件)的路径添加到Windows PATH环境变量。
就我而言C:\Users\mhaagsma\AppData\Roaming\npm


2

安装grunt的正确方法是运行以下命令:

npm install grunt -g

(如果收到EACCESS错误消息,请在上面的命令前加上“ sudo”)

-g将使npm全局安装该软件包,因此您可以随时在当前计算机中使用它。


6
请注意,如果您这样做(我刚刚测试过),grunt由于grunt软件包不包含任何命令行工具,仍然会失败。你需要grunt-cli
航空

3
显然,您需要本地和全球
Adonis K. Kakoulidis 2014年

1
全局安装(用于命令行需求),本地安装用于“ require(无论如何)”类型需求。因此,您需要同时做这两项。谢谢你的帮助!
prograhammer

1

您好,我在Mac上遇到了这个问题,我所做的是

全局安装并以全局路径作为前缀

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

现在 $ which grunt

应该放出来 /usr/local/bin/grunt

干杯


0

有时您必须npm install package_name -g使其正常工作。


感谢你的回答。我发现了我尝试做的事情的另一种方式。
AJP 2012年

@AJP您能告诉我们您是如何工作的,而不仅仅是告诉我们您做了什么?谢谢。
rayfranco

@rayfranco对不起,我基本上是通过放弃来解决它的……我想我们可能正在尝试制作jquery-ui库,所以我们只是下载了它,虽然现在真的不记得了……对不起,我知道那没有用,请在找到解决方案后将其回发。好像有许多其他人都来到了此页面(没有成功)。
AJP 2012年

0

其他解决方案是在我使用的情况下删除ubuntu捆绑程序:

sudo apt-get remove ruby-bundler 

那对我有用。


0

在Windows上,部分谜团似乎是npm安装Grunt.cmd文件的位置。在Linux机器上,我只需要在Windows 8工作笔记本电脑上运行sudo npm install -g grunt-cli,将Grunt放在“ .npm-global”目录中:%USER_HOME%\。npm-global和我必须将其添加到路径中。

因此,在Windows上,我的步骤是:

  • npm install -g grunt-cli

  • 弄清楚到底grunt.cmd在哪里(我猜是在%USER_HOME%\ App_Data \ Roaming中)

  • 将位置添加到我的Path环境变量中。打开一个新的cmd提示符,grunt命令运行正常。


0

在Windows 10上,将此添加到您的路径:

%APPDATA%\npm

这引用了文件夹 ~/AppData/Roaming/npm

[假设您已经运行npm install -g grunt-cli]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.