[解決済み] webpack-dev-serverでreact-routerからの入力を許可する方法
2022-08-28 07:13:01
質問
開発でreact-routerと一緒にwebpack-dev-serverを使用するアプリを作っています。
webpack-dev-serverは一箇所(つまり"/")に公開されたエントリポイントを持つことを前提に作られているようですが、react-routerではエントリポイントを無制限に持つことができるようです。
webpack-dev-serverの利点、特にホットリロード機能は生産性に優れているので欲しいのですが、やはりreact-routerで設定したルートをロードできるようにしたいのです。
どのように実装すれば、両者が連動するようになるのでしょうか?webpack-dev-server の前に express server を走らせれば、このようなことが可能になるのでしょうか?
どのように解決するのですか?
プロキシを設定して実現しました。
通常の express ウェブサーバが、アセットルート以外のあらゆるルートで index.html を提供します。
react のホットエントリーポイントは webpack の開発サーバーを直接指すので、ホットリロードはまだ機能します。
webpack-dev-server を 8081 で動かし、プロキシを 8080 で動かすと仮定しましょう。server.js ファイルはこのようになります。
"use strict";
var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./make-webpack-config')('dev');
var express = require('express');
var proxy = require('proxy-middleware');
var url = require('url');
## --------your proxy----------------------
var app = express();
## proxy the request for static assets
app.use('/assets', proxy(url.parse('http://localhost:8081/assets')));
app.get('/*', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
# -----your-webpack-dev-server------------------
var server = new WebpackDevServer(webpack(config), {
contentBase: __dirname,
hot: true,
quiet: false,
noInfo: false,
publicPath: "/assets/",
stats: { colors: true }
});
## run the two servers
server.listen(8081, "localhost", function() {});
app.listen(8080);
のように、webpackの設定にエントリーポイントを作成します。
entry: [
'./src/main.js',
'webpack/hot/dev-server',
'webpack-dev-server/client?http://localhost:8081'
]
hotreloadのために8081に直接コールしていることに注意してください。
に絶対パスを渡していることも確認してください。
output.publicPath
オプションに絶対パスを渡すようにしてください。
output: {
publicPath: "http://localhost:8081/assets/",
// ...
}
関連
-
[解決済み] クエリ文字列からパラメータ値を取得する方法は?
-
[解決済み] React Router v4で履歴にプッシュする方法は?
-
[解決済み】WebpackのHot Module Replacementとは一体何ですか?
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] Reactコンポーネントでthis.setStateを複数回使用するとどうなりますか?
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] javascriptでオプションのパラメータを扱う
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]