Heroku部署错误:找不到模块-编译

时间:2018-08-20 23:53:31

标签: node.js heroku deployment

这与其他问题类似,但是我将解释有什么不同。

像其他许多应用程序一样,我有一个可以在自己的服务器上正常运行的应用程序,但是当我推送到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

3 个答案:

答案 0 :(得分:0)

好吧,事实证明答案可以在Heroku的Troubleshooting Node.js Deploys页中找到。原来,我在某个时候不小心开始跟踪node_modules。我不记得它是如何发生的,但是认为它是在我愚弄自己的.gitignore时发生的。直接从疑难解答页面获取的此解决方案是:

  1. 检查是否正在跟踪node_modules -如果返回结果列表,则您是:
  

git ls文件| grep node_modules

  1. 确保您不再跟踪它
  

echo“ node_modules”> .gitignore

  1. 删除缓存的node_modules
  

git rm -r-缓存的节点模块

  1. 进行新的提交
  

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

...

祝你好运!