嗯,这很糟糕,这是独家新闻:
我正在帮助一个朋友使用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环境的帮助或见解都会非常有帮助,因为我要拔掉头发。提前谢谢!
答案 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发布,并在此处添加链接。
您可能需要重新安装全局程序包bower
和grunt-cli
才能将其包含在PATH中:
sudo npm i -g bower grunt-cli
关于npm
需要注意的一点是,几乎所有的软件包都是非全局安装的;只能在命令行路径中全局安装包。