【问题标题】:MEAN stack on Ubuntu 14.04 suddenly stopped workingUbuntu 14.04 上的 MEAN 堆栈突然停止工作
【发布时间】:2015-02-26 11:40:20
【问题描述】:

好吧,这很臭,这是独家新闻:

我正在帮助一位朋友使用 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 来获取它们来解决未满足的依赖关系,而且我无法启动开发服务器,我已经尝试删除节点并且 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 环境的帮助或见解都将非常有帮助,因为我要拔掉头发了。提前致谢!

【问题讨论】:

  • 你能链接你的 package.json 吗?

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


【解决方案1】:

所以首先,很抱歉你陷入了这个混乱。部分原因是npm update 中的一个错误——update 不尊重语义版本控制——但不幸的是它还没有被修复并且一直在咬人。因此,任何人都不应该运行npm update,尤其是永远不要运行npm update -g

此外,官方的 Debian/Ubuntu 软件包有点落后于当前版本,并且在您从 Debian 获得的 npm install 中存在一些令人讨厌的竞争条件。幸好有NodeSource提供的包https://github.com/nodesource/distributions#usage-instructions>

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 文件发布为 gist https://gist.github.com 并在此处添加链接。

您可能需要重新安装全局软件包 bowergrunt-cli 才能将它们放在您的 PATH 中:

sudo npm i -g bower grunt-cli

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

【讨论】:

  • 谢谢!谢谢!谢谢!我将在这里添加一些轻微的错字更正:在 Ubuntu 上,当我尝试运行 sudo apt-get install -y nodejs nodejs-legacy 它不喜欢 nodejs-legacy,所以我放弃了,node -v 现在显示 10.35,我尝试了 sudo install -g npm@latest 但那不是'不是一个有效的命令?我的 npm 是 v 1.4.28 但工作正常。我重新安装了 bower 和 grunt,删除了 node_modules 并重新运行了npm install,现在一切正常!非常感谢好心的先生!我真的真的真的很感激! :D
  • 对不起,我的意思是npm install -g npm@latest。很高兴你成功了。
猜你喜欢
  • 1970-01-01
  • 2012-10-24
  • 2015-01-12
  • 2017-08-22
  • 2021-02-01
  • 2016-12-29
  • 2018-05-09
  • 2015-12-07
相关资源
最近更新 更多