尝试运行grunt时找不到模块'findup-sync'

时间:2013-03-16 00:08:01

标签: node.js gruntjs

安装后我无法运行grunt-cli。我跑

npm install -g grunt-cli

然后用

运行grunt错误
    node.js:63
    throw e;
    ^
Error: Cannot find module 'findup-sync'
    at loadModule (node.js:275:15)
    at require (node.js:411:14)
    at Object.<anonymous> (/home/tmartin/bin/grunt:9:14)
    at Module._compile (node.js:462:23)
    at Module._loadScriptSync (node.js:469:10)
    at Module.loadSync (node.js:338:12)
    at Object.runMain (node.js:522:24)
    at Array.<anonymous> (node.js:756:12)
    at EventEmitter._tickCallback (node.js:55:22)
    at node.js:773:9

这就是我安装的内容:

tmartin@timcomp:~$ npm list -g
/home/tmartin/lib
└─┬ grunt-cli@0.1.6
  ├─┬ findup-sync@0.1.2
  │ ├─┬ glob@3.1.21
  │ │ ├── graceful-fs@1.2.0
  │ │ ├── inherits@1.0.0
  │ │ └─┬ minimatch@0.2.11
  │ │   ├── lru-cache@2.2.2
  │ │   └── sigmund@1.0.0
  │ └── lodash@1.0.1
  └─┬ nopt@1.0.10
    └── abbrev@1.0.4

9 个答案:

答案 0 :(得分:11)

我必须安装并链接findup-sync和其他一些npm软件包才能解决这些依赖性问题。我虽然npm应该为我们处理它们,但是手动安装依赖项会使问题消失。

npm install findup-sync -g

npm link findup-sync

答案 1 :(得分:9)

我让我再次在全球和我的回购中重新安装grunt-cli。

npm install -g grunt-cli

cd myrepo

npm install grunt-cli

我认为Yosemite安装在我的文件中破坏了一些东西......

答案 2 :(得分:3)

这是因为npm没有为/ usr / lib / node_modules / grunt-cli中的子目录node_modules设置正确的权限。 就我而言,我有:

drwxr-x--- 6 nobody root 4096 16 févr. 17:08 node_modules

当以非root用户身份运行grunt时,由于拒绝读取此目录的权限,我遇到了同样的错误(找不到模块'findup-sync')。

解决方案是使用chmod修复权限:chmod a + rx node_modules。

但事实上,涉及所有目录。最好的方法是todo:

find /usr/lib/node_modules/grunt-cli -type d -exec chmod a+rx {} \;

这可能是一个分发错误(我使用Archlinux)。

答案 3 :(得分:2)

这看似简单,但如果其他人不确定是否存在权限问题,请尝试运行sudo grunt,然后从那里开始。

答案 4 :(得分:1)

这也可能很明显,但是就我而言,我已经在主目录(在chromebook上)上设置了npm路径,并且需要向.profile中添加.node_modules
PATH=~./node_modules:$PATH
然后运行:
source ~/.profile

答案 5 :(得分:1)

我使用NVM并在更改活动节点版本时遇到此问题。

遵循@davidcondrey的建议对我有用。真正的问题是在grunt之前先安装grunt-cli 。顺序有所不同并加以解决。

CIFilter

@inostia使用 sudo 来测试权限的答案是可以的,但是让我非常头痛的是文件权限,因为git以后无法使用所有经过grunt处理的文件,这破坏了我的权限版本。

答案 6 :(得分:0)

我能够通过使用以下命令重新安装Grunt来解决此问题:

sudo npm remove -g grunt-cli
sudo npm install -g grunt-cli

答案 7 :(得分:0)

如果您更改NodeJS版本,则会发生此问题。

更改节点版本后,重新安装gruntnpm install将解决此问题。

答案 8 :(得分:0)

尝试了以上所有答案,如果不使用sudo,我将无法工作

最后遇到this Wordpress article,并删除了指向/usr/local/lib/node_modules/grunt/bin/grunt的链接

lrwxrwxrwx 1 root root 35 Apr 19 22:45 /usr/local/bin/grunt -> ../lib/node_modules/grunt/bin/grunt

使用sudo rm /usr/local/bin/grunt

然后我链接到/ usr / local / lib / node_modules / grunt-cli / bin中的grunt可执行文件

使用sudo ln -s /usr/local/lib/node_modules/grunt-cli/bin/grunt /usr/local/bin/grunt

现在,我无需使用sudo即可运行grunt