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.jsonscripts 部分,只保留start 键并删除其他键。

package.json 中的 scripts 应该是,

"scripts": 
    "start": "node server.js"
  ,

同样在部署之前,手动构建 react 应用程序。

Heroku 搞砸了所有这些 build 脚​​本。

【讨论】:

我在下面尝试了 Mike 的回答,这解决了我的问题。不过还是谢谢你的回答!

以上是关于Heroku 部署在“修剪 devDependencies”步骤中继续失败的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 上部署 React 和 Django

Heroku 应用程序在部署后崩溃

在 Heroku 上部署时未找到模块错误

在heroku上部署django网站时出错

在 Heroku 上部署 Django\Tornado

在 Heroku 上部署 asgi 和 wsgi