Heroku Next JS应用推送被拒绝,原因是Node版本问题



当尝试将我的应用程序推送到Heroku时,我得到以下错误(编辑简短):

remote: -----> Creating runtime environment
remote:        
remote:        NPM_CONFIG_LOGLEVEL=error
remote:        NODE_VERBOSE=false
remote:        NODE_ENV=production
remote:        NODE_MODULES_CACHE=true
remote:        
remote: -----> Installing binaries
remote:        engines.node (package.json):  >=v12.22.5
remote:        engines.npm (package.json):   >=6.14.14
remote:        
remote:        Resolving node version >=v12.22.5...
remote: Could not parse Version Requirements '>=v12.22.5': the given version requirement is invalid
remote:        Downloading and installing node 17.0.1...
remote:        Bootstrapping npm >=6.14.14 (replacing 8.1.0)...
remote:        npm >=6.14.14 installed

我的包。Json (name redacted):

{
"name": "########",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start -p $PORT"
},
"engines": {
"node": "16.13.0"
},
"dependencies": {
"@stripe/react-stripe-js": "^1.4.1",
"@stripe/stripe-js": "^1.15.0",
"@zeit/next-css": "^1.0.0",
"axios": "^0.21.4",
"base-64": "^1.0.0",
"bootstrap": "^4.6.0",
"cookie": "^0.4.1",
"date-and-time": "^1.0.0",
"js-cookie": "^2.2.1",
"next": "^11.1.2",
"react": "17.0.2",
"react-bootstrap": "^1.5.2",
"react-calendar": "^3.3.1",
"react-datepicker": "^4.2.1",
"react-dom": "17.0.2",
"react-hook-form": "^7.17.4",
"react-icons": "^4.2.0",
"react-image-gallery": "^1.0.9",
"stripe": "^8.154.0"
}
}

…再往下看:

remote: Error: error:0308010C:digital envelope routines::unsupported
remote:     at new Hash (node:internal/crypto/hash:67:19)
remote:     at Object.createHash (node:crypto:130:10)
remote:     at BulkUpdateDecorator.hashFactory (/tmp/build_f62151d1/node_modules/next/dist/compiled/webpack/bundle5.js:138971:18)
remote:     at BulkUpdateDecorator.update (/tmp/build_f62151d1/node_modules/next/dist/compiled/webpack/bundle5.js:138872:50)
remote:     at /tmp/build_f62151d1/node_modules/next/dist/compiled/webpack/bundle5.js:59321:9
remote:     at processTicksAndRejections (node:internal/process/task_queues:83:21)
remote:     at runNextTicks (node:internal/process/task_queues:65:3)
remote:     at processImmediate (node:internal/timers:437:9) {
remote:   opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
remote:   library: 'digital envelope routines',
remote:   reason: 'unsupported',
remote:   code: 'ERR_OSSL_EVP_UNSUPPORTED'
remote: }
remote: Node.js v17.0.1
remote: 
remote: -----> Build failed
remote:        
remote:        We're sorry this build is failing! You can troubleshoot common issues here:
remote:        https://devcenter.heroku.com/articles/troubleshooting-node-deploys
remote:        
remote:        Some possible problems:
remote:        
remote:        - Dangerous semver range (>) in engines.node

并且,在错误消息的末尾,我不确定这是否是一个单独的错误。我把我的主分支改为main一段时间后,我不确定这是否也告诉我,我可能做得不正确(在GitHub上看起来很好):

remote: Verifying deploy...
remote: 
remote: !   Push rejected to #########.
remote: 
To https://git.heroku.com/########.git
! [remote rejected]   main -> main (pre-receive hook declined)

我一直在谷歌"周围的房子"尝试各种各样的修复,没有答案,工作。在我看来,Heroku从我的package.json中读取了错误的信息?非常感谢您的回复。

得到了Heroku支持的一些帮助。我的问题似乎与当前在线的用例相匹配,但我不认为这是相同的。如果有人有同样的问题,我将把我的解决方案放在这里。

Heroku build试图自动安装Node的17版,因为它不理解我包中的"引擎"版本。而Heroku的构建版本与17.x版本不兼容

包的版本。json '卡在' Heroku's build中

"engines": {
"node": ">=v12.22.5"
},

但是我在测试期间多次更改了该版本,似乎Heroku没有注意到package.json的更改。Heroku的支持人员告诉我运行一个缓存清除,这是有效的。一旦我运行缓存清除Heroku构建,然后从"引擎"元素中选择正确版本的Node。下面是如何清除构建缓存

从Heroku CLI安装Heroku -builds

heroku plugins:install heroku-builds

确保本地机器上的Node版本正确,但更重要的是确保package.json中引用了正确的版本。我决定使用16.13.0版本

"engines": {
"node": "16.13.0"
},

运行Heroku缓存清理

heroku builds:cache:purge -a example-app

然后重新部署你的应用程序。在我的情况下,这个问题被修复了。不确定Heroku是否同意(我没有资格争论),但我觉得最后的错误是因为需要清除缓存。


清除构建缓存:
https://help.heroku.com/18PI5RSY/how-do-i-clear-the-build-cache

支持的节点版本:
https://devcenter.heroku.com/articles/nodejs-support#supported-runtimes

最新更新