因此,当尝试将Node.js应用程序部署到Heroku时,我使用heroku logs -t收到此错误。
> 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文件。但是,这显然不起作用。我该怎么做才能解决这个问题?
答案 0 :(得分:-1)
为什么这么说?
Heroku缓存您的模块,因此无法识别对package.json的任何更新。因此,您的本地副本将是公然正确的;然而,Heroku不会。为了克服这个问题,请输入:
heroku config:set NODE_MODULES_CACHE=false