heroku在构建脚本失败,但heroku本地网很好 [英] heroku failed at the build script but heroku local web is fine

查看:119
本文介绍了heroku在构建脚本失败,但heroku本地网很好的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遵照指示,将回购推到了heroku,我发现它坠毁了。
我使用heroku / nodejs作为buildpack。

程序文件:

  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 =生产WEBPACK_CONFIG = browser_prod,server_prod webpack --colors,
build-browser:cross-env NODE_ENV =生产WEBPACK_CONFIG = browser_prod webpack -
build-run:npm run build& npm run server,
build-static:cross-env NODE_ENV =生产WEBPACK_CONFIG =静态webpack - 颜色,
build-static-run:npm run build-static& npm run static,
clean:rimraf dist,
lint :eslint。,
server:节点dist / serve r,

当我从Procfile或$ heroku local web运行脚本时,一切正常。但推回购是在日志中引发错误:

  2018-01-30T22:23:05.780537 + 00:00 heroku [web .1]:用命令`npm run build&&& npm run heroku-server` 
2018-01-30T22:23:07.502982 + 00:00 heroku [web.1]:状态从开始变为崩溃
2018-01-30T22:23:07.491558+ 00:00 heroku [web.1]:进程退出状态1
2018-01-30T22:23:07.292672 + 00:00应用[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; //未处理'错误'事件
2018-01-30T22:23:07.421070 + 00:00应用[web.1]:^
2018-01-30T22:23:07.421071 + 00:00应用[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]: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]:在Function.Module.runMain(module.js:703:11)
2018-01-30T22:23:07.421083 + 00:00 app [web .1]:在启动时(bootstrap_node.js:193:16)
2018-01-30T22:23:07.421085 + 00:00 app [web.1]:在bootstrap_node.js:617:3
2018-01-30T22:23:07.426513 + 00:00 app [web.1]:npm ERR!代码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 =生产WEBPACK_CONFIG = browser_prod,server_prod webpack --colors`

我缺少什么?

解决方案

首先,不要把你的npm run build Procfile。
这样做会导致每一次您的网页动态重新启动时都会执行该步骤,而不是你想要的。



相反,您想要在运行期间运行webpack(或其他任何您需要的方法,以确保您的应用程序中存在所需的依赖关系) slu comp编译



由于您使用的是 heroku / node.js buildpack ,它会自动处理你正在运行的npm install(或纱线安装,如果你选择使用 yarn package manager )。然而,如果你需要比npm / yarn更多的安装(例如,如果你需要运行webpack来捆绑客户端依赖),那么你需要为slug编译器提供额外的这些步骤的说明。一个很好的方法是使用 heroku特定的构建步骤所以,例如,你可能想在你的package.jsonscripts的heroku-postbuild步骤中运行webpack,例如: p>

 heroku-postbuid:cross-env NODE_ENV =生产WEBPACK_CONFIG = browser_prod,server_prod webpack --colors,

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



解决方法是将webpack(与任何其他需要的构建依赖关系一起)移动到dependencies(而不是devDependencies),或将config var NPM_CONFIG_PRODUCTION设置为false:

<$ p $ > heroku config:set NPM_CONFIG_PRODUCTION = false

更多信息,请参阅< a href =https://stackoverflow.com/questions/48316230/error-in-deploying-on-heroku-bin-sh-1-webpack-not-found/48320907#48320907>这里和< a href =https://stackoverflow.com/questions/41973338/hosting-a-production-react-app-built-with-wepback-on-heroku/41973881#41973881>这里。


I followed instructions, pushed repo to heroku and I find it crashed. I use heroku/nodejs as a buildpack.

Procfile:

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

Scripts:

  "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",

When I run scripts from Procfile or $ heroku local web everything is builing fine. But pushed repo is throwing the errors in logs:

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`

What am I missing?

解决方案

First of all, don't put your "npm run build" step in your Procfile. Doing so will cause that step to run every time your web dyno restarts, which is not what you want.

Instead, you want to run webpack (or whatever else you need for making sure the dependencies you need are present in your app) during slug compilation.

By virtue of the fact that you are using the heroku/node.js buildpack, it will automatically take care of running "npm install" for you (or yarn install, if you choose to use the yarn package manager instead).

However, if you need more than npm/yarn install (e.g. if you need to run webpack to bundle client dependencies), then you need to provide the slug compiler with additional instructions for those steps. A good way to do that is by using heroku-specific build steps.

So, for example, you might want to run webpack in a heroku-postbuild step in your package.json "scripts", e.g.:

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

However, in addition you need to be aware that by default Heroku won't install any of your package.json devDependencies. So if you have webpack itself listed in devDependencies, you won't be able to use it in a heroku-postbuild step by default.

The way to workaround that is to either move webpack (together with any other build dependencies you need) to "dependencies" (instead of "devDependencies"), or to set config var NPM_CONFIG_PRODUCTION to false:

heroku config:set NPM_CONFIG_PRODUCTION=false   

For more info, see here and here.

这篇关于heroku在构建脚本失败,但heroku本地网很好的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆