这与其他问题类似,但是我将解释有什么不同。
像其他许多应用程序一样,我有一个可以在自己的服务器上正常运行的应用程序,但是当我推送到Heroku时,出现以下错误:
remote: > react-scripts build
remote:
remote: module.js:549
remote: throw err;
remote: ^
remote:
remote: Error: Cannot find module './error'
remote: at Function.Module._resolveFilename (module.js:547:15)
remote: at Function.Module._load (module.js:474:25)
remote: at Module.require (module.js:596:17)
remote: at require (internal/module.js:11:18)
remote: at Object.<anonymous> (/tmp/build_96886a1c0acbba91a1be57ec9c1487e8/client/node_modules/browserslist/index.js:7:25)
remote: at Module._compile (module.js:652:30)
remote: at Object.Module._extensions..js (module.js:663:10)
remote: at Module.load (module.js:565:32)
remote: at tryModuleLoad (module.js:505:12)
remote: at Function.Module._load (module.js:497:3)
remote: npm ERR! code ELIFECYCLE
remote: npm ERR! errno 1
remote: npm ERR! client@0.1.0 build: `react-scripts build`
区别在于,我没有安装require('./error')
或文件或文件夹或依赖项,称为错误。
我尝试了以下方法:
1。
npm install -g
2。
删除node_modules
npm缓存清理--force
npm安装
3。 添加到我的package.json中:
"engines": {
"node": "8.11.3"
}
4。 从零开始,我克隆了我的工作应用程序,创建了一个新的Heroku实例,并尝试进行部署。
5。 试过这个:
heroku config:set NODE_MODULES_CACHE = false
这些解决方案和其他无效的解决方案来自这些帖子:
How do I resolve "Cannot find module" error using Node.js?
Heroku Deploy Error: Cannot get Node App running after Deploy : Cannot find module '/app/web.js'
Heroku Deploy Error: Cannot find module './errors/cast'
Error: Cannot find module './shared'
https://github.com/nodejs/help/issues/1271
https://help.heroku.com/TO64O3OG/cannot-find-module-in-node-js-at-runtime
答案 0 :(得分:0)
好吧,事实证明答案可以在Heroku的Troubleshooting Node.js Deploys页中找到。原来,我在某个时候不小心开始跟踪node_modules。我不记得它是如何发生的,但是认为它是在我愚弄自己的.gitignore时发生的。直接从疑难解答页面获取的此解决方案是:
git ls文件| grep node_modules
echo“ node_modules”> .gitignore
git rm -r-缓存的节点模块
git commit -am'untracked node_modules'
这解决了我的问题。
答案 1 :(得分:0)
我通过更新package.json以指定节点的较新版本来解决此问题。
{
"name": "myapp",
"engines": {
- "node": "8.1.4"
+ "node": "11.10.0"
},
npm install
似乎忽略了package.json节点版本,仅使用本地安装的任何版本,因此我在本地没有问题,但是在Heroku运行时上,因为Heroku部署使用了软件包中指定的节点版本.json。
~/projects/myapp$ node -v
v11.10.0
~/projects/myapp$ npm install -verbose
npm info it worked if it ends with ok
npm verb cli [ '/usr/local/Cellar/node/11.10.0/bin/node',
npm verb cli '/usr/local/bin/npm',
npm verb cli 'install',
npm verb cli '-verbose' ]
npm info using npm@6.9.0
npm info using node@v11.10.0
答案 2 :(得分:0)
这里:
https://devcenter.heroku.com/articles/troubleshooting-node-deploys#missing-modules
这至少是暂时挽救了我的生命(“internal/modules/cjs/loader.js:888”问题),直到我弄清楚在我的部门或 Heroku 平台中发生了什么变化。截至上个月,Heroku 似乎已停止为我的 Angular 项目正确修剪 deps,或者可能开始这样做有点过早。
<块引用>缺少模块
如果 package.json 中包含的模块从 构建或生产应用程序,它可能已被 Heroku 删除 修剪。一个常见的错误看起来像这样:
internal/modules/cjs/loader.js:960 抛出错误; ^
错误:找不到模块“express”
为了为应用创建更小的 slug 大小,buildpack 将修剪 在构建结束时从 package.json 中取出 devDependencies, 这样 slug 将只包含在 运行。如果 devDependencies 中有一个依赖项 修剪发生后需要,将依赖移动到依赖项, 所以它不会被删除。
另一个解决方案是关闭 devDependencies 的修剪 共。为此,请为 npm 设置以下内容:
heroku config:set NPM_CONFIG_PRODUCTION=false
...
祝你好运!