Hosting a production React app built with Wepback on Heroku

前端 未结 2 1570
清酒与你
清酒与你 2020-11-27 08:22

Every time I push to heroku it simply says \"Not Found\". I am assuming it is because webpack doesn\'t run?

I\'ve tried all sorts of scripts:

\"scrip         


        
相关标签:
2条回答
  • 2020-11-27 09:00

    You need to put webpack (as well as any other dependencies that you need on Heroku) under "dependencies" in your package.json, not under "devDependencies".

    0 讨论(0)
  • 2020-11-27 09:00

    I think a better way to handle this is to keep your package.json clean, and since Heroku makes it harder to build things, just handle that specific case.

    We use the NPM postinstall hook to perform build tasks, load dev dependencies for those tasks, cleanup, etc.

    From the scripts section of your package.json:

    "scripts": { 
      "postinstall": "node ./ops/heroku-build.js" 
    }
    

    And heroku-build.js:

    'use strict';
    
    if ('HEROKU' in process.env || ('DYNO' in process.env && process.env.HOME === '/app')){
    
      const pkg = require('../package.json');
      const ChildProcess = require('child_process');
    
    
      let deps = pkg.devDependencies;
      let packages = "";
    
      Object.keys(deps).forEach((key) => {
        packages += `${key}@${deps[key]} `; // note space at end to separate entries
      });
    
      try {
        console.time("install");
        console.log("starting npm install of dev dependencies");
        ChildProcess.execSync(`npm install ${packages}`);
        console.timeEnd("install");
    
        console.time("build");
        console.log("starting npm build");
        ChildProcess.execSync(`npm run build:all`);
        console.timeEnd("build");
    
        console.time("uninstall");
        console.log("starting npm uninstall of dev dependencies");
        ChildProcess.execSync(`npm uninstall ${packages}`);
        console.timeEnd("uninstall");
      }
      catch (err) {
        console.error(err.message);
      }
    } else {
      console.log("Not Heroku, skipping postinstall build");
    }
    

    That way if we decide to deploy to AWS or somewhere else in the future, we can handle the idiosyncrasies of their environment separately.

    Heroku documentation on how to customize the build process.

    0 讨论(0)
提交回复
热议问题