节点包 ( 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' 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:这应该可以帮助您使 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 ) 已安装但不可用的主要内容,如果未能解决你的问题,请参考以下文章
Windows系统下Python使用pip安装第三方包报错SSL模块不可用