Ubuntu 14.04上的MEAN堆栈突然停止工作

时间:2014-12-30 09:56:41

标签: node.js gruntjs npm ubuntu-14.04 mean-stack

嗯,这很糟糕,这是独家新闻:

我正在帮助一个朋友使用MEAN堆栈(mongodb,express,angular和nodejs)处理网站项目,我正在运行Ubuntu 14.04。我对Linux非常了不起,而且我是一位经验丰富的Web开发人员,但我的大多数经验都是使用LAMP堆栈。我一直在做这个MEAN堆栈项目,直到今晚。我的朋友今晚重新开始进行开发,我通过运行npm update帮助他们在Mac上刷新他们的节点环境(他们主要做前端HTML / CSS并且我做了完整的堆栈)并且项目在他们的comp上工作正常。确定我可以轻松刷新我的节点环境以获得更新的信息,我尝试了同样的事情:

我试图更新我的节点和npm环境因为我已经这么做了几个月(我知道它很糟糕,我搞砸了,我承认了),我想我正在使用Node.js v 0.3。 2.something,没想到在此混乱发生之前检查版本号。但是现在我得到了疯狂的随机错误集,未满足的依赖关系,我无法通过使用npm install来获取它们来解决未满足的依赖关系,而且我无法让grunt启动dev服务器,我尝试删除节点和npm并重新安装(现在运行nodejs 0.10.25)已运行apt-get update,apt-get install nodejs,apt-get install nodejs-dev,npm update,npm install等,但无济于事。

我超越了沮丧,超越沮丧,请帮忙!以下是我得到的一些错误/缺失依赖项的示例:

module.js:340
throw err;
      ^
Error: Cannot find module './helpers'
 at Function.Module._resolveFilename (module.js:338:15)
 at Function.Module._load (module.js:280:25)
 at Module.require (module.js:364:17)
 at require (module.js:380:17)
 at Object.<anonymous>            
 at Module._compile (module.js:456:26)
 at Object.Module._extensions..js (module.js:474:10)
 at Module.load (module.js:356:32)
 at Function.Module._load (module.js:312:12)
 at Module.require (module.js:364:17)
 npm ERR! weird error 8
 npm WARN This failure might be due to the use of legacy binary "node"
 npm WARN For further explanations, please read
 /usr/share/doc/nodejs/README.Debian
 npm ERR! not ok code 0

当我尝试运行sudo grunt时,我明白了:

Loading "jshint.js" tasks...ERROR
>> Error: Cannot find module './name-stack.js'
Loading "grunt-karma.js" tasks...ERROR
>> Error: Cannot find module 'depd'
Warning: Task "jshint" not found. Used --force, continuing.

Running "concurrent:default" (concurrent) task
Loading "jshint.js" tasks...ERROR
>> Error: Cannot find module './name-stack.js'
Loading "jshint.js" tasks...ERROR
>> Error: Cannot find module './name-stack.js'
Loading "grunt-karma.js" tasks...ERROR
Loading "grunt-karma.js" tasks...ERROR
>> Error: Cannot find module 'depd'
>> Error: Cannot find module 'depd'

[Error:           /home/user/Projects/detrashed/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/bson.node: invalid ELF header]
js-bson: Failed to load c++ bson extension, using pure JS version
[Error: /home/user/Projects/detrashed/node_modules/connect-  mongo/node_modules/mongodb/node_modules/bson/build/Release/bson.node: invalid ELF header]
js-bson: Failed to load c++ bson extension, using pure JS version

module.js:340
 throw err;
      ^
Error: Cannot find module './collection/batch/unordered'
  at Function.Module._resolveFilename (module.js:338:15)
  at Function.Module._load (module.js:280:25)
  at Module.require (module.js:364:17)
  at require (module.js:380:17)
  at Object.<anonymous> (/home/user/Projects/detrashed/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/collection.js:21:17)
  at Module._compile (module.js:456:26)
  at Object.Module._extensions..js (module.js:474:10)
  at Module.load (module.js:356:32)
  at Function.Module._load (module.js:312:12)
  at Module.require (module.js:364:17)

多么尴尬。任何有关如何解开我的nodejs环境的帮助或见解都会非常有帮助,因为我要拔掉头发。提前谢谢!

1 个答案:

答案 0 :(得分:5)

首先,我很抱歉你陷入了这个烂摊子。部分原因是npm update中的错误 - update不尊重语义版本控制 - 但遗憾的是它尚未修复并且一直在咬人。因此,任何人都不应该npm update,尤其是npm update -g。{/ p>

此外,官方Debian / Ubuntu软件包稍微滞后于当前版本,并且在npm install期间,您从Debian获得的node期间存在一些令人讨厌的竞争条件。幸运的是,NodeSource提供了一些软件包&lt; https://github.com/nodesource/distributions#usage-instructions&gt;

sudo apt-get --purge remove nodejs nodejs-legacy curl -sL https://deb.nodesource.com/setup | sudo bash - sudo apt-get install -y nodejs nodejs-legacy node -v

这应该是最新的node,0.10.35。

然后更新npm

sudo npm install -g npm@latest npm -v

这应该是最新的npm,2.1.17(或更高版本)。

现在恢复你的项目。首先,我会吹走node_modules并运行npm install。如果您从中获得任何错误,请将完整的npm-debug.log文件作为要点https://gist.github.com发布,并在此处添加链接。

您可能需要重新安装全局程序包bowergrunt-cli才能将其包含在PATH中:

sudo npm i -g bower grunt-cli

关于npm需要注意的一点是,几乎所有的软件包都是非全局安装的;只能在命令行路径中全局安装包。