我按照指示,将回购推送到heroku,我发现它崩溃了。 我使用heroku / nodejs作为buildpack。
Procfile:
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本地web运行脚本时,一切正常。但是推出的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`
我错过了什么?
答案 0 :(得分:0)
首先,不要在Procfile中放置“npm run build”步骤。 这样做会导致每次web dyno restarts时都运行该步骤,这不是您想要的。
相反,您希望在slug compilation期间运行webpack(或您需要的任何其他内容以确保您的应用中存在所需的依赖项)。
由于您正在使用heroku/node.js buildpack,它会自动为您运行“npm install”(或者如果您选择使用yarn package manager进行纱线安装) 。
但是,如果您需要超过npm / yarn安装(例如,如果您需要运行webpack来捆绑客户端依赖项),那么您需要为slug编译器提供有关这些步骤的其他说明。一个好方法是使用heroku-specific build steps。
因此,例如,您可能希望在package.json“scripts”中的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