create-react-app
を使用してReactアプリケーションを初期化しました。これで、ExpressクライアントからReactクライアントアプリケーションを提供しています。React + Express - 開発時に/ buildの代わりに提供するもの
マイアプリの構造は、私エクスプレスサーバがserver/
である
project/
build/
server/
src/
で、アプリがsrc/
であり、そしてアプリはnpm run build
でbuild/
に構築されますリアクトリアクトMY。
私のExpressアプリケーションは(下に示すように)build/
ディレクトリのファイルを提供するため、ブラウザに変更を反映させるためにクライアントコードを変更するたびにnpm run build
に変更する必要があります。
// server/app.js
const express = require('express');
const path = require('path');
const app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
// Serve static assets
app.use(express.static(path.resolve(__dirname, '..', 'build')));
// sockets
require('./sockets')(io);
// serve main file
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, '..', 'build', 'index.html'));
});
module.exports = server;
ビルドステップは何秒かかるので、これは明らかにダウンだけreact-scripts start
と反応するアプリを提供し、それがコードの変更を監視し、瞬時にブラウザに反映たときからの大きな一歩です。
の代わりに私が提供すべきファイルはどこにあるのですか?私が生産または開発中であるかどうかを確認するのにNODE_ENV === 'production'
を使用できますか?
I.e.関連する質問は、「react-scripts start
のReactサーバーを実行すると、どこから提供されているのですか」という疑問がありますか?編集:どのようにその場所にソースファイルを構築することが非常に迅速なように彼らは監視されていますか?
これは実際の質問に対する回答ではありませんが、この問題を回避するために実現したことは、(例えばソケット通信を処理するための)Expressアプリケーションを追加したいだけなので、リアクションアプリそのものを提供しています。だからブロック '' isProduction'(isProductionはNODE_ENVをベースにしています)にセクション '//静的資産を提供し、//メインファイルを提供する 'セクションを作り、代わりに2つのサーバを稼動させて、React devサーバとExpressサーバーおよびクライアントは、index.htmlの最初のもの以外のすべての要求をExpressサーバーに代わって行います。 – tscizzle