【问题标题】:heroku failed at the build script but heroku local web is fineheroku 在构建脚本中失败,但 heroku 本地网络很好
【发布时间】:2018-07-09 22:28:07
【问题描述】:

我按照说明,将 repo 推送到 heroku,但我发现它崩溃了。 我使用 heroku/nodejs 作为构建包。

过程文件:

web: npm run build && npm run heroku-server

脚本:

  "scripts": {
    "heroku-server": "cross-env SERVER_PROD_PORT=$PORT SERVER_PROD_HOST=0.0.0.0 npm run server",
    "browser": "cross-env NODE_ENV=development WEBPACK_CONFIG=browser_dev webpack-dev-server --open",
    "build": "cross-env NODE_ENV=production WEBPACK_CONFIG=browser_prod,server_prod webpack --colors",
    "build-analyze": "cross-env BUNDLE_ANALYZER=1 NODE_ENV=production WEBPACK_CONFIG=browser_prod,server_prod webpack --colors",
    "build-browser": "cross-env NODE_ENV=production WEBPACK_CONFIG=browser_prod webpack --colors",
    "build-run": "npm run build && npm run server",
    "build-static": "cross-env NODE_ENV=production WEBPACK_CONFIG=static webpack --colors",
    "build-static-run": "npm run build-static && npm run static",
    "clean": "rimraf dist",
    "lint": "eslint .",
    "server": "node dist/server",

当我从 Procfile 或 $ heroku 本地网络运行脚本时,一切都很好。但是推送的 repo 会在日志中抛出错误:

2018-01-30T22:23:05.780537+00:00 heroku[web.1]: Starting process with command `npm run build && npm run heroku-server`
2018-01-30T22:23:07.502982+00:00 heroku[web.1]: State changed from starting to crashed
2018-01-30T22:23:07.491558+00:00 heroku[web.1]: Process exited with status 1
2018-01-30T22:23:07.292672+00:00 app[web.1]:
2018-01-30T22:23:07.292693+00:00 app[web.1]: > beers@2.10.0 build /app
2018-01-30T22:23:07.292694+00:00 app[web.1]: > cross-env NODE_ENV=production WEBPACK_CONFIG=browser_prod,server_prod webpack --colors
2018-01-30T22:23:07.292695+00:00 app[web.1]:
2018-01-30T22:23:07.421065+00:00 app[web.1]: events.js:137
2018-01-30T22:23:07.421068+00:00 app[web.1]:       throw er; // Unhandled 'error' event
2018-01-30T22:23:07.421070+00:00 app[web.1]:       ^
2018-01-30T22:23:07.421071+00:00 app[web.1]:
2018-01-30T22:23:07.421073+00:00 app[web.1]: Error: spawn webpack ENOENT
2018-01-30T22:23:07.421074+00:00 app[web.1]:     at _errnoException (util.js:1003:13)
2018-01-30T22:23:07.421076+00:00 app[web.1]:     at Process.ChildProcess._handle.onexit (internal/child_process.js:201:19)
2018-01-30T22:23:07.421078+00:00 app[web.1]:     at onErrorNT (internal/child_process.js:389:16)
2018-01-30T22:23:07.421080+00:00 app[web.1]:     at process._tickCallback (internal/process/next_tick.js:152:19)
2018-01-30T22:23:07.421081+00:00 app[web.1]:     at Function.Module.runMain (module.js:703:11)
2018-01-30T22:23:07.421083+00:00 app[web.1]:     at startup (bootstrap_node.js:193:16)
2018-01-30T22:23:07.421085+00:00 app[web.1]:     at bootstrap_node.js:617:3
2018-01-30T22:23:07.426513+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2018-01-30T22:23:07.426855+00:00 app[web.1]: npm ERR! errno 1
2018-01-30T22:23:07.428042+00:00 app[web.1]: npm ERR! beers@2.10.0 build: `cross-env NODE_ENV=production WEBPACK_CONFIG=browser_prod,server_prod webpack --colors`

我错过了什么?

【问题讨论】:

    标签: node.js reactjs heroku webpack


    【解决方案1】:

    首先,不要将“npm run build”步骤放在 Procfile 中。 这样做会导致该步骤在您每次web dyno restarts 时运行,这不是您想要的。

    相反,您希望在slug compilation 期间运行 webpack(或确保您的应用程序中存在所需的依赖项所需的任何其他东西)。

    由于您使用的是heroku/node.js buildpack,它会自动为您运行“npm install”(或yarn install,如果您选择使用yarn package manager)。

    但是,如果您需要的不仅仅是 npm/yarn install(例如,如果您需要运行 webpack 来捆绑客户端依赖项),那么您需要为 slug 编译器提供这些步骤的额外说明。一个很好的方法是使用heroku-specific build steps

    因此,例如,您可能希望在 package.json “脚本”中的 heroku-postbuild 步骤中运行 webpack,例如:

    "heroku-postbuid" : "cross-env NODE_ENV=production WEBPACK_CONFIG=browser_prod,server_prod webpack --colors",
    

    但是,此外,您还需要注意,默认情况下 Heroku 不会安装您的任何 package.json devDependencies。因此,如果您在 devDependencies 中列出了 webpack 本身,则默认情况下您将无法在 heroku-postbuild 步骤中使用它。

    解决方法是将 webpack(连同您需要的任何其他构建依赖项)移动到“依赖项”(而不是“devDependencies”),或者将 config var NPM_CONFIG_PRODUCTION 设置为 false:

    heroku config:set NPM_CONFIG_PRODUCTION=false   
    

    有关详细信息,请参阅 herehere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 2017-06-22
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 2021-01-20
      相关资源
      最近更新 更多