最近我的Heroku停止工作了。每次尝试运行任何脚本(包括我编写的测试脚本)时,都会出现以下错误:
internal/modules/cjs/loader.js:968
throw err;
^
Error: Cannot find module 'request'
Require stack:
- /app/src/util/util.js
- /app/src/main.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)
at Function.Module._load (internal/modules/cjs/loader.js:841:27)
at Module.require (internal/modules/cjs/loader.js:1025:19)
at require (internal/modules/cjs/helpers.js:72:18)
at Object.<anonymous> (/app/src/util/util.js:3:19)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Module.require (internal/modules/cjs/loader.js:1025:19) {
code: 'MODULE_NOT_FOUND',
requireStack: [ '/app/src/util/util.js', '/app/src/main.js' ]
}
我已经完成了以下Heroku故障排除页面中的所有操作,但没有任何效果。 https://devcenter.heroku.com/articles/troubleshooting-node-deploys https://help.heroku.com/TO64O3OG/cannot-find-module-in-node-js-at-runtime
我什至尝试克隆回购的干净副本,并且能够通过以下方式成功运行脚本
npm install
npm start
我的package.json
:
{
"name": "lol-catalyst",
"version": "0.0.1",
"description": "LoL Catalyst.",
"main": "main.js",
"scripts": {
"start": "node src/main.js"
},
"dependencies": {
"archiver": "latest",
"aws-sdk": "latest",
"cheerio": "latest",
"express": "^4.17.1",
"html-to-text": "latest",
"lodash": "^4.17.20",
"request": "latest",
"retry": "latest"
},
"engines": {
"node": "12.x",
"npm": "6.x"
}
}
Procfile:
worker: node --optimize_for_size --max_old_space_size=460 --gc_interval=100 src/main.js bihourly
esports: node --optimize_for_size --max_old_space_size=460 --gc_interval=100 src/main.js esports
test: npm start
我尝试过heroku run test
并遇到相同的错误。
AFAIK在过去的两个月中,我没有对代码进行太多更改,而且问题似乎已经完全解决了。
过去一个小时我一直在研究和测试,对您的帮助将不胜感激。
补充:我已经确认在heroku和本地安装的npm和node版本都完全相同。
添加:我尝试将随机依赖项添加到util.js
中,除了标准依赖项之外,没有其他可用的依赖项。例如,我将util.js更改为
const path = require('path')
const fs = require('fs')
const retry = require('retry')
const request = require('request')
...
现在,它抱怨找不到retry
而不是request
,但是这表明它可以找到path
和fs
。
添加:看来Heroku没有安装我的依赖项。根据日志,最后一次成功运行脚本的时间是9/23。通过检查提交历史记录,我确实在9/23上推送了一次提交,但是更改的只是js文件中的一行。这似乎是最近出现的Heroku方面的问题。