Heroku Next JS 应用推送因 Node 版本而被拒绝
Heroku Next JS app push rejected because of Node version
尝试将我的应用程序推送到 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
我的package.json(姓名已编辑):
{
"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)
我一直在 'around the houses' Google 上尝试各种修复,但没有找到有效的答案。在我看来,Heroku 似乎从我的 package.json 中读取了错误的信息?非常感谢任何回复。
在这方面得到了 Heroku 支持的一些帮助。我的问题似乎与当前在线的当前用例相匹配,但我认为这不一样。如果其他人有同样的问题,我会把我的解决方案放在这里。
Heroku 构建试图自动安装 Node 版本 17,因为它不理解我当时 package.json 中的 'engines' 版本,并且 Heroku 构建与版本不兼容17.x
Heroku 构建中 package.json 'stuck' 的版本
"engines": {
"node": ">=v12.22.5"
},
但我在测试期间多次更改该版本,Heroku 似乎没有注意到 package.json 的更改。 Heroku 支持人员告诉我 运行 缓存清理 运行ce 并且成功了。一旦我 运行 缓存清除 运行ce Heroku 构建然后从 'engines' 元素中选择了正确版本的 Node。这是清除构建缓存的方法
从 Heroku CLI 安装 heroku-builds
heroku plugins:install heroku-builds
确保本地计算机上的 Node 版本正确,但更重要的是确保 package.json 中引用的版本正确。我决定使用版本 16.13.0
"engines": {
"node": "16.13.0"
},
运行 Heroku 缓存清除运行ce
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
尝试将我的应用程序推送到 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
我的package.json(姓名已编辑):
{
"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)
我一直在 'around the houses' Google 上尝试各种修复,但没有找到有效的答案。在我看来,Heroku 似乎从我的 package.json 中读取了错误的信息?非常感谢任何回复。
在这方面得到了 Heroku 支持的一些帮助。我的问题似乎与当前在线的当前用例相匹配,但我认为这不一样。如果其他人有同样的问题,我会把我的解决方案放在这里。
Heroku 构建试图自动安装 Node 版本 17,因为它不理解我当时 package.json 中的 'engines' 版本,并且 Heroku 构建与版本不兼容17.x
Heroku 构建中 package.json 'stuck' 的版本
"engines": {
"node": ">=v12.22.5"
},
但我在测试期间多次更改该版本,Heroku 似乎没有注意到 package.json 的更改。 Heroku 支持人员告诉我 运行 缓存清理 运行ce 并且成功了。一旦我 运行 缓存清除 运行ce Heroku 构建然后从 'engines' 元素中选择了正确版本的 Node。这是清除构建缓存的方法
从 Heroku CLI 安装 heroku-builds
heroku plugins:install heroku-builds
确保本地计算机上的 Node 版本正确,但更重要的是确保 package.json 中引用的版本正确。我决定使用版本 16.13.0
"engines": {
"node": "16.13.0"
},
运行 Heroku 缓存清除运行ce
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