简体   繁体   中英

Heroku build failure when deploying Node.js/React app

I'm working on a React/Node app (using create-react-app) and trying to deploy it using Heroku. When we try to deploy on Heroku, we get the following error about react-scripts: sh: 1: react-scripts: not found .

Edit: looking at the full logs, it seems that Heroku successfully installed the node packages but for some reason it can't find react-scripts.

We've tried referring to similar issues on here but haven't had any luck finding a solution. Has anyone else ran into this and found a solution or know what might be causing?

Here's the full Heroku log and package.json files are below for reference:

-----> Building on the Heroku-20 stack
-----> Using buildpacks:
       1. heroku/nodejs
       2. mars/create-react-app
-----> Node.js app detected
       
-----> Creating runtime environment
       
       NPM_CONFIG_LOGLEVEL=error
       NODE_VERBOSE=false
       NODE_ENV=production
       NODE_MODULES_CACHE=true
       
-----> Installing binaries
       engines.node (package.json):  16.x
       engines.npm (package.json):   unspecified (use default)
       
       Resolving node version 16.x...
       Downloading and installing node 16.15.1...
       Using default npm version: 8.11.0
       
-----> Installing dependencies
       Installing node modules
       
       added 203 packages, and audited 204 packages in 12s
       
       58 packages are looking for funding
         run `npm fund` for details
       
       found 0 vulnerabilities
       
-----> Build
       Running heroku-postbuild
       
       > pool-chem-calculator@1.0.0 heroku-postbuild
       > cd client && npm run build
       
       
       > client@0.1.0 build
       > react-scripts build
       
sh: 1: react-scripts: not found
-----> Build failed
       
       We're sorry this build is failing! You can troubleshoot common issues here:
       https://devcenter.heroku.com/articles/troubleshooting-node-deploys
       
       If you're stuck, please submit a ticket so we can help:
       https://help.heroku.com/
       
       Love,
       Heroku
       
 !     Push rejected, failed to compile Node.js app.
 !     Push failed

Here are the package.json files for the app:

Root:

{
  "name": "pool-chem-calculator",
  "version": "1.0.0",
  "description": "Calculator that calculates pool water chemistry based off values in a form",
  "main": "server/server.js",
  "scripts": {
    "start": "if-env NODE_ENV=production && npm run start:prod || npm run start:dev",
    "start:prod": "cd server && npm start",
    "start:dev": "concurrently \"cd server && npm run dev\" \"cd client && npm start\"",
    "test": "cd client && npm run test",
    "lint": "npx eslint client/src",
    "heroku-postbuild": "cd client && npm run build"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/pschlafley/Pool-Chem-Calculator.git"
  },
  "author": "Peyton Schlafley, Tom Chestnut",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/pschlafley/Pool-Chem-Calculator/issues"
  },
  "homepage": "https://github.com/pschlafley/Pool-Chem-Calculator#readme",
  "devDependencies": {
    "concurrently": "^7.2.0",
    "eslint": "^7.11.0",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-react": "^7.28.0",
    "prettier": "^2.5.1"
  },
  "dependencies": {
    "if-env": "^1.0.4"
  },
  "engines": {
    "node": "16.x"
  }
}

Client:

{
  "name": "client",
  "version": "0.1.0",
  "private": true,
  "proxy": "http://localhost:3001",
  "type": "module",
  "dependencies": {
    "@apollo/client": "^3.6.2",
    "@emotion/react": "^11.7.1",
    "@emotion/styled": "^11.6.0",
    "@mui/material": "^5.3.0",
    "@testing-library/jest-dom": "^5.16.1",
    "@testing-library/react": "^11.2.7",
    "@testing-library/user-event": "^12.8.3",
    "formik": "^2.2.9",
    "graphql": "^16.5.0",
    "jwt-decode": "^3.1.2",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-router-dom": "^6.2.1",
    "react-scripts": "4.0.3",
    "web-vitals": "^1.1.2",
    "yup": "^0.32.11",
    "react-device-detect": "^2.1.2"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

Server:

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "type": "module",
  "scripts": {
    "start": "node server.js",
    "dev": "nodemon server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "apollo-server-express": "^3.6.4",
    "bcrypt": "^5.0.1",
    "express": "^4.17.3",
    "graphql": "^16.3.0",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^6.2.7"
  },
  "devDependencies": {
    "nodemon": "^2.0.15"
  }
}

我认为你应该在客户端执行npm i react-scripts

Thanks for the help!

We ended up adding

"heroku-prebuild": "npm install && cd client && npm install && cd ../ && cd server && npm install",

to the scripts in the root package.json and so the packages get installed in both directories before the build process, and the build works on Heroku now.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM