1

私はサーバーサイドレンダリングを利用する私の作成反応アプリケーションアプリケーションでコード分割を試みています。create-react-appのサーバー側で反応搭載型を使用できますか?

私は「反応-loadable`をコード分割を行うために利用しています:https://github.com/thejameskyle/react-loadable

私は単にそれが動作するかどうかだけ確認するために、離れて私のアプリの残りの部分から私のHome.jsコンポーネントを分割している今のところ。開発モード(読み取り:SSRではない)では、それはちょっと離れてうまく動作します。

しかし、私はサーバー上で作業することができません。私は彼らのGithubページのガイドに従っていて、必要なウェブパックの変更のために立ち往生しています。 create-react-appアプリケーションでは、非表示になっているwebpackにアクセスできません。

サーバを起動するとき、私は受信エラーがある:

return (0, _importInspector.report)(import('../components/home/Home'), { 
               ^^^^^^ 
SyntaxError: Unexpected token import 
at createScript (vm.js:80:10) ... 

私はガイドに記載されているように、私はWebPACKの正しく設定されていないからだとかなり確信しています。ガイドで

は、それが明確にSSRのために述べている:

まず我々はWebPACKの各モジュールは、内部の住んでいるバンドルたちに伝える必要があります。これにはReact Loadable Webpackプラグインがあります。

リアクションロード可能な/ webpackからReactLoadablePluginをインポートし、webpackの設定に組み込みます。私たちのバンドルについてのJSONデータをどこに保存するかというファイル名を渡してください。

// webpack.config.js 
import { ReactLoadablePlugin } from 'react-loadable/webpack'; 

export default { 
    plugins: [ 
     new ReactLoadablePlugin({ 
      filename: './dist/react-loadable.json', 
     }), 
    ], 
}; 

私はこれがイジェクトなしで可能ではないと思います。 react-loadableをサーバ側でレンダリングされたcreate-react-appアプリケーションで使用できるのであれば誰でも知りたいですか?

答えて

1

サーバーファイルの先頭にこれらのモジュールをインポート

require('ignore-styles'); 
require('babel-polyfill') 
require('babel-register')({ 
    ignore: [ /(node_modules)/ ], 
    presets: ['es2015', 'react-app'], 
    plugins: [ 
     'syntax-dynamic-import', 
     'dynamic-import-node', 
     'react-loadable/babel' 
    ] 
}); 
+0

ナイス!問題は、 "dynamic-import-node"がimport()をサーバー上で動作させるが、ブラウザのコード分割を取り消すことである。だから、サーバ専用に有効にする必要があります(.babelrcに追加しないでください)。これはこれを行うのに最適な場所です。この回答は受け入れられるべきです。 – Viacheslav

関連する問題