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

Posted

技术标签:

【中文标题】节点包 ( Grunt ) 已安装但不可用【英文标题】:Node package ( Grunt ) installed but not available 【发布时间】:2012-05-26 21:34:11 【问题描述】:

我正在尝试使用grunt 构建github jquery-ui library,但是在运行npm install 之后我仍然无法根据readme file 运行命令。它只是给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 

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢您的回答。我找到了一种不同的方法来解决我想做的事情。 @AJP 你能告诉我们你是如何让它工作的,而不仅仅是告诉我们你做了吗?谢谢。 @rayfranco 抱歉,我基本上是通过放弃来绕过它...我想我们可能正在尝试制作 jquery-ui 库,所以我们刚刚下载了它,但现在不记得了。 ..对不起,我知道这没有用,请在找到解决方案后发回解决方案。看起来很多其他人已经来到了这个页面(没有任何成功)。【参考方案2】:

如果您确实通过运行 npm install -g grunt 安装了 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:这应该可以帮助您使 grunt 工作,这个答案与 jquery-ui 无关。

2013 年 2 月更新:您应该查看 @tom-p's answer,它可以更好地解释正在发生的事情。 Tom 为我们提供了真正的解决方案,而不是破解您的 bashrc 文件:两者都可以,但您应该先尝试安装 grunt-cli

【讨论】:

查看其他答案 - 提供解释。 你能解释一下这里的酒窖是什么吗?这是您/您的安装所特有的吗?【参考方案3】:

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

npm install grunt -g

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

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

【讨论】:

请注意,如果你这样做(我刚刚测试过),grunt 仍然会失败,因为 grunt 包不包含任何命令行工具。你需要grunt-cli 显然,你需要本地和全局 全局安装(用于命令行需要),本地安装用于“require(whatever)”类型的需要。所以你需要两者都做。感谢您的帮助!【参考方案4】:

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

【讨论】:

谢谢,将它添加到我的 .bash_profile 有助于解决我的问题! 添加 $HOME/npm/bin 在 ubuntu 13.10 上为我工作。【参考方案5】:

命令行工具不包含在最新版本的 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 部分中将 grunt 标记为仅用于开发的模块。

【讨论】:

运行 npm install -g grunt-cli 后在路径系统变量中找不到 grunt 文件夹路径 必须使用 sudo 运行 如果这对您不起作用,请尝试卸载 grunt 和 grunt-cli,然后再次执行。仅当我使用 sudo 时才对我有用,谢谢汤姆! 注意:如果您必须使用 sudo,这与您的节点设置方式有关。这并不理想,但可以修复。 sindresorhus suggests one way。我更喜欢使用NVM(节点版本管理器) 如果你在这里并且在运行上述命令后点击node not found并且你使用包管理器安装节点,那么你还需要符号链接sudo ln -s /usr/local/bin/nodejs /usr/local/bin/node【参考方案6】:

就我而言,我需要在第 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

【讨论】:

建设性的反对以劝阻任何人手动编辑打包文件。对于您的问题,您需要apt-get install nodejs-legacy 您的建议是对我全新安装的 Debian Jessie 有效的最新且唯一的建议之一。 Ok Air,但我使用的是 OSX,我会尝试类似brew install nodejs-leacy @Air 谢谢这是我的问题。完成上述所有步骤后,它无法识别 grunt【参考方案7】:

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

【讨论】:

【参考方案8】:

其他解决方案是在我使用的情况下删除 ubuntu bundler:

sudo apt-get remove ruby-bundler 

这对我有用。

【讨论】:

【参考方案9】:

在 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 命令运行良好。

【讨论】:

【参考方案10】:

还有另一种在 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 的人可能会觉得它很有用。【参考方案11】:

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

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

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

现在 $ which grunt

应该输出 /usr/local/bin/grunt

干杯

【讨论】:

【参考方案12】:

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

%APPDATA%\npm

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

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

【讨论】:

【参考方案13】:

    全局安装 grunt de manera:sudo npm install -g grunt-cli --unsafe-perm=true --allow-root

    尝试运行 grunt。

    如果您收到此消息:

警告:

您需要在 PATH 中安装 Ruby 和 Sass 才能执行此任务。

更多信息:https://github.com/gruntjs/grunt-contrib-sass

使用 --force,继续。

3.1。检查你是否安装了 ruby​​(mac,你应该有): ruby​​ -v

【讨论】:

以上是关于节点包 ( Grunt ) 已安装但不可用的主要内容,如果未能解决你的问题,请参考以下文章

台式win7有线网络连接已启用但不可用该怎么办?

解决debian蓝牙不可用问题

Windows系统下Python使用pip安装第三方包报错SSL模块不可用

如果通过其他包注册,包的功能不可用

无法通过弹性搜索与 dockerized 进程进行通信,并显示“所有已配置的节点都不可用”

yum 安装包的时候提示“没有可用软件包”