Heroku 部署在“修剪 devDependencies”步骤中继续失败
Posted
技术标签:
【中文标题】Heroku 部署在“修剪 devDependencies”步骤中继续失败【英文标题】:Heroku Deployment Continues to Fail at "Pruning devDependencies" Step 【发布时间】:2020-05-31 19:26:23 【问题描述】:我在部署到 Heroku 时仍然遇到问题,我无法找出我一生中出了什么问题。 Heroku 错误日志在成功构建我的反应应用程序后告诉我:
-----> Caching build
- node_modules
-----> Pruning devDependencies
npm ERR! Cannot read property 'match' of undefined
这是我的 package.json
"name": "test",
"version": "1.0.0",
"homepage": "./",
"description": "test",
"main": "server.js",
"node": "v12.13.1",
"npm": "6.13.7",
"scripts":
"heroku": "node server.js",
"client-install": "npm install --prefix client",
"build": "cd client && react-scripts build",
"start": "node server.js",
"server": "nodemon server.js",
"client": "npm start --prefix client",
"dev": "concurrently \"npm run server\" \"npm run client\""
,
"author": "John Doe",
"license": "MIT",
"dependencies":
"@material-ui/core": "^4.8.0",
"axios": "^0.19.0",
"bcryptjs": "^2.4.3",
"body-parser": "^1.18.3",
"classnames": "^2.2.6",
"concurrently": "^5.1.0",
"date-fns": "^2.8.1",
"debug": "^4.1.1",
"depcheck": "^0.9.1",
"eslint-plugin-flowtype": "^4.6.0",
"express": "^4.16.4",
"fibers": "^4.0.2",
"growl": "^1.10.5",
"heroku": "^7.35.1",
"history": "^4.10.1",
"is-empty": "^1.2.0",
"jquery": "^3.4.1",
"jsonwebtoken": "^8.3.0",
"jwt-decode": "^2.2.0",
"material-table": "^1.54.2",
"material-ui": "^0.20.2",
"minimatch": "^3.0.4",
"moment": "^2.23.0",
"mongodb": "^3.5.3",
"mongoose": "^5.8.9",
"mongoose-global": "^1.0.1",
"morgan": "^1.9.1",
"node-sass": "^4.13.0",
"passport": "^0.4.0",
"passport-jwt": "^4.0.0",
"plaid": "^4.6.0",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-ga": "^2.7.0",
"react-plaid-link-button": "0.0.4",
"react-router-dom": "^5.1.2",
"react-scripts": "^3.3.0",
"react-slick": "^0.25.2",
"react-stripe-elements": "^6.0.1",
"react-vis": "^1.11.7",
"redux-thunk": "^2.3.0",
"sass": "^1.24.0",
"slick": "^1.12.2",
"slick-carousel": "^1.8.1",
"typescript": "^3.7.4",
"update-mongo": "0.0.4",
"validator": "^12.2.0",
"vis": "^4.21.0-EOL"
,
"devDependencies": ,
"engines":
"node": "12.x"
,
"browserslist":
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
也许最令人沮丧的是,前几天我能够成功部署一次,但我不确定发生了什么变化。回顾我的 git,我看不到任何会产生任何影响的东西。
我尝试过的事情:
删除 package.json 将"devDependencies":
添加到我的 package.json 中(虽然我
在没有它的情况下成功部署)
更新节点并将 engines
部分添加到我的 package.json 到
匹配。
在本地运行 npm prune
确保在 package.json 中正确更新和引用所有包
我怀疑可能是问题所在:
也许我当前在 heroku 上积极部署的应用程序版本干扰了我的新部署?话虽如此,我已经尝试缩小测功机并进行部署。此外,npm ERR! Cannot read property 'match' of undefined
似乎还表示其他东西?
【问题讨论】:
【参考方案1】:请rm -rf node_modules && npm i
也一定要跟踪package-lock.json
文件
只要你在那里,不相关,但添加.nvmrc
文件可能是个好主意
node -v >> .nvmrc
如果有帮助,请告诉我们
【讨论】:
【参考方案2】:在我的部署在多次成功后莫名其妙地开始失败后遇到了这个问题。
阻止 heroku 缓存 node_modules
似乎对我有用。
heroku config:set NODE_MODULES_CACHE=false
然后git push heroku master
在听说 Heroku 不能很好地处理锁定文件后,我没有提交 package-lock.json
,但想知道这是否是问题所在。
【讨论】:
老兄.. 这为我节省了很多时间和精力。我不知道该怎么感谢你才足够。将该配置变量设置为 false 为我解决了这个问题。 作为一个单独的问题,我可以在我的浏览器上导航到 heroku 应用程序,但是只能在我的本地计算机上(我无法在手机或同一浏览器上的不同浏览器上打开它)笔记本电脑)。知道为什么会这样吗?我只是在使用 Hobby dynos,所以也许我需要扩大规模?我可能还需要扩展我的 MongoDB 后端(目前使用免费版本),或者我的构建可能会优化得更好......抱歉抽象的后续! 很高兴它有所帮助 - 关于无法访问您的应用程序,我不太确定。我自己也在使用 dynos,但是我的前端和后端 dynos 都可以从任何地方访问。 谢谢你这对我也有用!我只是想补充一点,您可以简单地从 heroku 应用程序仪表板中的设置选项卡转到您的环境变量,然后添加键/值对NODE_MODULES_CACHE
: false
作为 cli 选项或启动脚本的替代方案。我遇到了同样的问题,我的构建之前成功,然后无缘无故地开始失败并出现匹配未定义错误。再次感谢您提供此解决方案。【参考方案3】:
在package.json
的scripts
部分,只保留start
键并删除其他键。
package.json
中的 scripts
应该是,
"scripts":
"start": "node server.js"
,
同样在部署之前,手动构建 react 应用程序。
Heroku 搞砸了所有这些 build
脚本。
【讨论】:
我在下面尝试了 Mike 的回答,这解决了我的问题。不过还是谢谢你的回答!以上是关于Heroku 部署在“修剪 devDependencies”步骤中继续失败的主要内容,如果未能解决你的问题,请参考以下文章