// この回答は、現在動作している RSK について説明しています。質問からは、RSK のHtml
コンポーネントまたはサーバー側のルーティングを変更したかどうかは明確ではありません (これによりアプリが壊れる可能性もあります)。
main.jsとは?
main.js は、すべての JavaScript が WebPack によってバンドルされる場所です。これが、それを参照するスクリプト タグを強制的に追加すると、非リリース ビルドで動作するようになる理由です。
ただし、 --release builds を使用する必要があります...
--release を使用してアプリをビルドすると、ファイル コンテンツのハッシュがファイル名に追加されます。これは、コンテンツが変更されると、ファイル名が変更されることを意味します。
古いバージョン (ISP など) のキャッシュはすべて別の名前のファイル用であるため、更新された名前の更新されたファイルを要求するクライアントは、古いバージョンを取得しないことが保証されます。
では、正しい main.js 名をハッシュで指定するにはどうすればよいでしょうか?
コンポーネントには、次のようなHtml
JSX フラグメントが必要です。<body>
{script && (
<script
id="source"
src={script}
data-initial-state={JSON.stringify(state)}
/>
)}
変数には main.js ファイル名が含まれているため、これは標準の RSK で機能しscript
ます (--release ビルドを使用する場合はハッシュが含まれます)。この変数値は、WebPack によって構築された assets.js から供給されます。次にHtml
、server.js からのインジェクションを介して、上記のフラグメントで使用するためにコンポーネントで使用できるようになります。
app.get('*', async (req, res, next) => {
const data = { title: '', description: '', style: '', script: assets.main.js, children: '' };
// ...
const html = ReactDOM.renderToStaticMarkup(<Html {...data} />);