NodeおよびHerokuにデプロイするのが非常に新しい。基本的なReactアプリをセットアップし、Herokuにデプロイしようとしている。アプリが失敗しています。ログを見ると、sh: 1: webpack: not found
(完全なログ ここ )
何が起こっているのかは確かではありませんが、package.jsonと関係があると思いますか?私が使用しているスターターテンプレートからは次のとおりです:
{
"name": "express-react-redux-starter",
"version": "1.0.0",
"description": "Starter for Express, React, Redux, SCSS applications",
"scripts": {
"dev": "webpack-dev-server --config ./webpack/webpack-dev.config.js --watch --colors",
"build": "rm -rf dist && webpack --config ./webpack/webpack-prod.config.js --colors",
"start": "PORT=8080 node start ./server.js",
"test": "mocha --compilers js:babel-core/register --require ./test/test_helper.js --recursive ./test",
"test:watch": "npm run test -- --watch",
"lint": "eslint src test webpack"
},
"keywords": [
"ExpressJS",
"ReactJS",
"Redux",
"React hot loader",
"React Router",
"SCSS",
"Webpack Devevelopment configuration",
"Webpack Production configuration",
"Airbnb Eslint",
"pm2",
"mocha",
"chai"
],
"repository": {
"type": "git",
"url": "git+https://github.com/DimitriMikadze/express-react-redux-starter"
},
"author": "Dimitri Mikadze",
"license": "MIT",
"devDependencies": {
"autoprefixer": "^6.4.0",
"autoprefixer-loader": "^3.2.0",
"babel-core": "^6.8.0",
"babel-loader": "^6.2.4",
"babel-preset-es2015": "^6.6.0",
"babel-preset-react": "^6.5.0",
"babel-preset-stage-1": "^6.5.0",
"chai": "^3.5.0",
"chai-jquery": "^2.0.0",
"css-loader": "^0.23.1",
"eslint": "^2.10.2",
"eslint-config-airbnb": "^9.0.1",
"eslint-plugin-import": "^1.8.0",
"eslint-plugin-jsx-a11y": "^1.2.0",
"eslint-plugin-react": "^5.1.1",
"extract-text-webpack-plugin": "^1.0.1",
"html-webpack-plugin": "^2.16.1",
"jquery": "^2.2.3",
"jsdom": "^9.0.0",
"mocha": "^2.4.5",
"node-sass": "^3.7.0",
"react-addons-test-utils": "^15.0.2",
"react-hot-loader": "^1.3.0",
"sass-loader": "^3.2.0",
"style-loader": "^0.13.1",
"url-loader": "^0.5.7",
"webpack-dev-server": "^1.14.1"
},
"dependencies": {
"classnames": "^2.2.5",
"express": "^4.13.4",
"lodash": "^4.15.0",
"react": "^15.0.2",
"react-dom": "^15.0.2",
"react-redux": "^4.4.5",
"react-router": "^2.4.0",
"redux": "^3.5.2",
"webpack": "^1.13.0"
}
}
これをデプロイするために間違って何をしていますか?私のローカルホストでうまく動作します。しかし、私の人生のためにこれを世界に持ち込む方法を理解することはできません。どうもありがとう!
Ok-これは、package.jsonのdevDependenciesとDependenciesに関係しています。また、Herokuの設定をNPM_CONFIG_PRODUCTION: false
これを解決できました。 Thxインターネット!
他の人が言ったように、Herokuはノードを実動として実行しますNODE_ENV=production
は、devDependenciesがインストールされないことを意味します。ただし、Herokuはノード固有のビルドフックを提供します。私が使う heroku-prebuild
走る npm install --dev
、すべての依存関係とdevDependenciesをインストールします。
"scripts": {
...,
"heroku-prebuild": "npm install --dev",
...
},
本番モード以外でアプリを実行することはおそらく避けるべきです。多くの場合、開発者は本番環境で実行するときに除外される「開発モード」固有のコードを持っています。さらに、Webpackビルドで物事を行う場合は、間違いなくプロダクションモードにして、縮小、uいなどを活用したいです。
Herokuの詳細を以下に示します。
開発者は、package.jsonのpreinstallおよびpostinstallフックよりも本番指向の何かを必要とする場合があります。たとえば、一部のアプリでは、依存関係をインストールする前に追加の認証を設定する必要があります。資産を構築する必要がありますが、開発環境では必要ありません。さらなる例は、GitHubの議論で見つけることができます。
Node.js開発者は、heroku-prebuildおよびheroku-postbuildフックを使用して、ビルドプロセスをアプリに合わせて調整できるようになりました。
これは、herokuがデフォルトでpackage.jsonのdev Dependenciesをインストールしないために発生し、heroku(npm)にdev依存関係(webpackはdevにある)を排他的にインストールする必要があるため、このコマンドを実行すると「not found issue」が解決されます
。
npm install --dev
この原因は、devDependencies
がインストールされていないことです。プロジェクトのルートディレクトリで次のコマンドを入力することで、これを克服できます。
heroku config:set NPM_CONFIG_PRODUCTION=false
その後、アプリを次回デプロイするときに問題が解決するはずです。
私は問題を誤解していたので、彼女は糸のユーザーのために:
"heroku-prebuild": "yarn install --production=false"
問題は、docu(少なくともnpmの場合)に従って後で発生するプルーニングではなく、糸がNODE_ENVを解釈し、ビルド前フェーズでもプロダクション依存関係のみをインストールすることです。
ヤーンにenv変数を「監視」させるには、--production=false
国旗。 https://yarnpkg.com/lang/en/docs/cli/install/ を参照してください
この動作は2018年3月1日に変更されました: https://devcenter.heroku.com/changelog-items/1376
devDependencies
をインストールしますが、デプロイの一部としてそれらを整理します。プルーニングは、heroku config:set NPM_CONFIG_PRODUCTION=false
を介してスキップできます。 NODE_ENV
はproduction
に設定されたままです。