2015-05-03 72 views
1

因此,当试图部署一个Node.js应用程序到Heroku时,我得到这个错误与heroku日志-t。NPM模块引用不适用于Mongoose

> State changed from crashed to starting Starting process with command 
> `node ./bin/www` Detected 512 MB available memory, 512 MB limit per 
> process (WEB_MEMORY) Recommending WEB_CONCURRENCY=1 Error: Cannot 
> find module 'mongodb/lib/read_preference' 
>  throw err; module.js:340 
>   ^
>  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 Module._compile (module.js:456:26) 
>  at Object.Module._extensions..js (module.js:474:10) 
>  at Object.<anonymous> (/app/node_modules/mongoose/lib/utils.js:5:16) 
>  at Module.load (module.js:356:32) 
>  at Function.Module._load (module.js:312:12) 
>  at Module.require (module.js:364:17) 

寻找目标文件的文件的文件夹的结构是这样的(内部的node_modules文件夹):

mongoose/lib/utils.js 

和查找的文件的代码是这样的:

var ReadPref = require('mongodb/lib/read_preference') 

,目标文件位于:

mongoose/node_modules/mongodb/lib/read_preference.js 

现在基于Node的搜索算法(https://nodejs.org/api/modules.html),文件将移动到node_modules文件夹,然后搜索mongodb,找到它并输入它的文件夹,最后到达read_preference文件。但是,这显然不起作用。我能做些什么来解决这个问题?

回答

-1

你为什么这么说?

Heroku缓存你的模块,所以对package.json的任何更新都不会被识别。所以你的本地副本将是公然正确的;然而,Heroku不会。为了解决这个问题,请输入:

heroku config:set NODE_MODULES_CACHE=false

+0

这并不准确。 heroku安装的第一步是从缓存中恢复node_modules;第二步是运行npm install over node_modules来更新它们以反映package.json或shinkwrap文件中的任何更改。 – hunterloftis

+0

那么,让我感到困惑的是将mongoose npm更新为4.x导致无法找到模块错误。对这些模块/文件的引用是正确的;然而,Heroku却抛出了这些错误。我指出你可能是错的,但它似乎是一个合乎逻辑的推论。 – snewcomer