私は環境として、Cloud9.io ubuntu VM Online IDEを使用していますが、このエラーのトラブルシューティングにより、Webpack devサーバーでアプリを実行することに減らしました。
私はそれを起動します。
webpack-dev-server -d --watch --history-api-fallback --Host $IP --port $PORT
$ IPはホストアドレス$ PORTがポート番号を持つ変数です。
Cloud 9にアプリをデプロイするときにはこれらの変数を使用するように指示されています。これらはデフォルトのIPおよびPORT情報を持っているからです。
サーバーが起動してコードをコンパイルします、問題ありません。インデックスファイルを表示しているのはnotです。テキストが "Invalid Host header"の空白の画面のみ。
これが要求です。
GET / HTTP/1.1
Host: store-client-nestroia1.c9users.io
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8
これは私のpackage.jsonです:
{
"name": "workspace",
"version": "0.0.0",
"scripts": {
"dev": "webpack -d --watch",
"server": "webpack-dev-server -d --watch --history-api-fallback --Host $IP --port $PORT",
"build": "webpack --config webpack.config.js"
},
"author": "Artur Vieira",
"license": "ISC",
"dependencies": {
"babel-core": "^6.18.2",
"babel-loader": "^6.2.8",
"babel-preset-es2015": "^6.18.0",
"babel-preset-react": "^6.16.0",
"babel-preset-stage-0": "^6.24.1",
"file-loader": "^0.11.1",
"node-fetch": "^1.6.3",
"react": "^15.5.4",
"react-bootstrap": "^0.30.9",
"react-dom": "^15.5.4",
"react-router": "^4.1.1",
"react-router-dom": "^4.1.1",
"url-loader": "^0.5.8",
"webpack": "^2.4.1",
"webpack-dev-server": "^2.4.4",
"whatwg-fetch": "^2.0.3"
}
}
これはwebpack.config.jsです。
const path = require('path');
module.exports = {
entry: ['whatwg-fetch', "./app/_app.jsx"], // string | object | array
// Here the application starts executing
// and webpack starts bundling
output: {
// options related to how webpack emits results
path: path.resolve(__dirname, "./public"), // string
// the target directory for all output files
// must be an absolute path (use the Node.js path module)
filename: "bundle.js", // string
// the filename template for entry chunks
publicPath: "/public/", // string
// the url to the output directory resolved relative to the HTML page
},
module: {
// configuration regarding modules
rules: [
// rules for modules (configure loaders, parser options, etc.)
{
test: /\.jsx?$/,
include: [
path.resolve(__dirname, "./app")
],
exclude: [
path.resolve(__dirname, "./node_modules")
],
loader: "babel-loader?presets[]=react,presets[]=es2015,presets[]=stage-0",
// the loader which should be applied, it'll be resolved relative to the context
// -loader suffix is no longer optional in webpack2 for clarity reasons
// see webpack 1 upgrade guide
},
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
},
{
test: /\.(png|jpg|jpeg|gif|svg|eot|ttf|woff|woff2)$/,
loader: 'url-loader',
options: {
limit: 10000
}
}
]
},
devServer: {
compress: true
}
}
Webpack devサーバーは私のホストの設定のためにこれを返しています。 webpack-dev-server/lib/Server.jsの60行目にあります。 https://github.com/webpack/webpack-dev-server から
私の質問は、このチェックに正しく合格するための設定方法です。任意の助けは大歓迎です。
DevServerのpublic
プロパティを自分のリクエストのHost値に設定する必要があることがわかりました。それはその外部アドレスに表示されるということです。
だから私は私のwebpack.config.jsでこれを必要としていました
devServer: {
compress: true,
public: 'store-client-nestroia1.c9users.io' // That solved it
}
別の解決策はCLIのそれを使用しています:
webpack-dev-server - public $ C9_HOSTNAME < - Cloud9外部IPの場合はvar
Webpack-dev-server 2.4.4でホストチェックを追加
devServer: {
compress: true,
disableHostCheck: true, // That solved it
}
編集:注意してください、この修正は安全ではありません。
安全な解決策については、次の回答をご覧ください。 https://stackoverflow.com/a/43621275/5425585
これは私のために働いたものです:
Webpack.config.jsのdevServerの下にallowedHostsを追加します。
devServer: {
compress: true,
inline: true,
port: '8080',
allowedHosts: [
'.amazonaws.com'
]
},
私は--Hostや--publicのパラメータを使う必要はありませんでした。
Webpack-dev-serverを使用している場合は、この設定をwebpack設定ファイルに追加してください(ホストに0.0.0.0を指定することもできます)。
devServer: {
disableHostCheck: true,
Host: '0.0.0.0',
port: 3000
}
より安全なオプションは、allowedHostsを次のようにWebpack構成に追加することです。
module.exports = {
devServer: {
allowedHosts: [
'Host.com',
'subdomain.Host.com',
'subdomain2.Host.com',
'Host2.com'
]
}
};
配列には許可されたすべてのホストが含まれます。サブドメインを指定することもできます。 こちらをご覧ください
C9でcreate-react-appを使用している場合は、このコマンドを実行して起動してください。
npm run start --public $C9_HOSTNAME
そして、あなたのホスト名が何であれからアプリにアクセスします(例えば、ホスト名を取得するために端末で$C_HOSTNAME
をタイプしてください)。