2017-08-14 13 views
4

webpackを使用してSSRリポジトリ(libのようなinferno-react)をバンドルしました。それには2つのルートファイルがあります.1つはサーバー用、もう1つはクライアント用ですが、まったく同じですが、クライアント側ではrequire.ensureを使ってチャンクが起こっています。ルートの 一つは、次のようになります。SSRで要求されたルートのダブルスクリプトタグ

<Route path="/home" getComponent={(props, cb) => {  
    require.ensure([], require => cb(null, 
    require('../views/containers/Home').default), 'home'); 
}}/> 

意味、ブラウザがブラウザにダウンロードされ.htmlbundle.jsを解析され、WebPACKの意志そしてその後、HTMLとにルートのコンポーネントの.jsスクリプトタグをチャンク挿入がダウンロードされます。しかし、そのルートの.jsは、bundle.jsがダウンロードされた後にのみダウンロードされるため、少し遅くなります。だから、webpack-manifest-pluginの助けを借りて、要求されたチャンクルートをサーバーから手動で追加します。しかし、今は、要求されたルートごとに、そのチャンクされたコンポーネントのファイル.htmlにダブルスクリプトタグがあります。 1つは手動でサーバーに追加したため、もう1つはrequire.ensureを使用してwebpackでチャンクを作成したためです。

問題はありませんが、2つのスクリプトタグが正常に機能します。 :/

私はそれを避ける方法がありますか、それ以外の方法はクライアント側でチャンクを維持しながらそれを処理することができます。

答えて

1

チャンクを非同期にロードしたくない場合は、require.ensureをドロップし、コードがメインバンドルに含まれるようにrequireを単に使用します。メインバンドルのインクルード以外のスクリプトタグは必要ありません。

それ以外の場合は、異なるページのコードを区切るためにチャンクを作成する場合は、自動生成されたチャンクの代わりに2番目のエントリポイントを使用します。

+0

チャンクが必要なため、追加されました。ええ、複数のポイント入力は簡単な解決策ではありますが、確かに問題は解決しますが、避けようとしているのは、新しいルートを追加するとwebpackの追加/削除の変更につながるためです。 – myDoggyWritesCode

+0

名前付きチャンクを使用すると、マニフェストプラグインを使用して挿入するのではなく、静的スクリプトタグ(例:手動でHTMLに挿入)のみを使用できますか?または、バンドル名にキャッシュバーストハッシュを使用するために必要ですか?私はあなたがここでサーバー上で何をしているのかについていくらか混乱することを認めます。 –

+0

キャッシュバスト処理とは関係ありませんが、正確なファイル名が必要です。私のチャンクが要求される前にbundle.jsがロードされるのを待つのは目的だけです。私のサーバルートは ''そして、マニフェストプラグインを使ってビルド時に 'home.js:home_hash.js'としてマッピングすると、実際のファイルを挿入するために' filename'プロップを使ってキーと値のマッピングから正確なファイル名を取得します(チャンク)が要求されている場合は、スクリプトタグ(deferとbundle.jsスクリプトタグの後に追加)をhtmlで追加します。 – myDoggyWritesCode

関連する問題