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

好吧,这太臭了,这里是独家新闻:

我正在帮助一个朋友在使用MEAN堆栈(mongodb,express,angular和nodejs)的网站项目上工作,我正在运行Ubuntu 14.04。 我对Linux非常了解,而且我是一名经验丰富的Web开发人员,但我的大部分经验都是使用LAMP堆栈。 直到今天晚上,我一直在做这个MEAN栈项目。 我的朋友跳回到今天晚上的发展,我帮助他们刷新他们在Mac上的节点env(他们大多做前端的HTML / CSS,我做全堆栈)通过运行npm更新和项目工作正常。 指出我可以轻松地刷新我的节点环境,以更加当前我试过同样的事情:

我试图更新我的节点和NPM环境,因为它已经过了几个月(我知道它的坏,我搞砸了,我承认它),我想我正在使用Node.js v 0.3.2.something ,没有想到在这个混乱发生之前检查版本号。 但现在我得到了疯狂的随机错误集,未满足的依赖关系,我无法通过使用npm安装来获取它们来解决未满足的依赖关系,我不能得到grunt来启动开发服务器,我试过删除节点和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环境的帮助或洞察将非常有帮助,因为我即将把我的头发。 提前致谢!

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

此外,官方的Debian / Ubuntu软件包滞后于目前的版本,并且在从Debian获得的node 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文件作为主要的https://gist.github.com发布,并在此处添加链接&#x3002;

您可能需要重新安装全局软件包bowergrunt-cli ,以便将其包含在PATH中:

sudo npm i -g bower grunt-cli

有一点需要注意的是,几乎所有的软件包都将被非全局安装。 如果你想在你的命令行PATH中安装一个全局的软件包。