节点包(Grunt)已安装但不可用

我正在尝试使用grunt构build一个github jquery-ui库 ,但是在运行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 

我很困惑,请问我错过了什么?

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

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

所以首先在全球安装grunt cli工具:

 npm install -g grunt-cli 

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

你可以通过inputgrunt --version来build立这个工作

现在您可以将当前版本的Grunt本地安装到您的项目中。 所以从你的项目的位置…

 npm install grunt --save-dev 

save-dev开关不是绝对必要的,但是是一个好主意,因为它将package.json devDependencies部分标记为仅限开发模块。

/usr/local/share/npm/bin/到您的$PATH

如果你已经通过运行npm install -g grunt安装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 

您可能应该根据可find您的节点二进制文件的path来replace/usr/local/Cellar/node/HEAD/bin

如果这对我来说是快而肮脏的 ,那是因为一切都应该没有这样做,但是由于一个未知的原因,一个链接似乎被打破了。 由于没有人在IRC可以告诉我为什么发生这种情况,我find了自己的方式,使其(咕噜)工作。

PS:这应该会帮助你做出咕噜的作品,这个答案不是jquery-ui相关的。

更新02/2013 :你应该看看@ tom-p的答案 , 这个答案更好地解释了发生了什么事情。 Tom给了我们真正的解决scheme,而不是攻击你的bashrc文件:两者都应该工作,但你应该先尝试安装grunt-cli

在我的情况下,我需要修改第1行文件/ usr / local / bin / grunt(不要这样做):

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

编辑:

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

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

在WIN7上,我不得不手动添加到Windows PATH环境variables的npm文件夹(其中包含难以捉摸的'grunt'文件)的path。 在我的情况是C:\ Users \ mhaagsma \ AppData \ Roaming \ npm

还有一种方法可以在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,或者一直在使用其他东西,例如构build代理的人,这是一个解决scheme。

编辑:增加的版本,因为咕cl cli工程与咕噜> 0.3

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

 npm install grunt -g 

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

-g将使npm全局安装软件包,这样你就可以在当前机器上使用它。

有时你必须npm install package_name -g才能正常工作。

其他解决scheme是删除我的情况下,我使用的Ubuntu的捆绑:

 sudo apt-get remove ruby-bundler 

这对我有效。

在Windows上,神秘的一部分似乎是npm安装Grunt.cmd文件的地方。 在我的Linux机器上,我只需要在我的Windows 8工作笔记本上运行sudo npm install -g grunt-cli,Grunt被放在'.npm-global'目录下:%USER_HOME%\ .npm-global和I必须添加到path。

所以在Windows上我的步骤是:

  • npm install -g grunt-cli

  • 找出heck grunt.cmd的位置(我想对于一些在%USER_HOME%\ App_Data \ Roaming中)

  • 将位置添加到我的Path环境variables。 打开一个新的cmd提示符,grunt命令运行良好。