2016-05-02 8 views
6

私のアプリでコード分割/チャンクを設定するのは、require.ensureを使用しています。だからここに私のルートです:ここでWebpackとReact.jsでのコード分割の設定

<Route path="profile" 
     getComponent={(location, cb) => 
     {require.ensure(
      [], 
      (require) => { cb(null, require('attendee/containers/Profile/').default) }, 
      'attendee')}} /> 

は私のWebPACKの設定から関連する行されています。私は、ルート内のページに移動すると、私は必要なチャンクがダウンロードさんログに

const PATHS = { 
    app: path.join(__dirname, '../src'), 
    build: path.join(__dirname, '../dist'), 
}; 

const common = { 
    entry: [ 
    PATHS.app, 
    ], 

    output: { 
    path: PATHS.build, 
    publicPath: PATHS.build + '/', 
    filename: '[name].js', 
    chunkFilename: '[name].js', 
    sourceMapFilename: '[name].js.map' 
    }, 

    target: 'web', 

devtool: 'cheap-module-eval-source-map', 
entry: [ 
    'bootstrap-loader', 
    'webpack-hot-middleware/client', 
    './src/index', 
], 
output: { 
    publicPath: '/dist/', 
}, 


plugins: [ 
    new webpack.DefinePlugin({ 
    'process.env': { 
     NODE_ENV: '"development"', 
    }, 
    __DEVELOPMENT__: true, 
    }), 
    new ExtractTextPlugin('main.css'), 
    new webpack.optimize.OccurenceOrderPlugin(), 
    new webpack.HotModuleReplacementPlugin(), 
    new webpack.NoErrorsPlugin(), 
    new webpack.ProvidePlugin({ 
    jQuery: 'jquery', 
    }), 
], 

見ます。しかし、ページは読み込まれません。

そして私は、コンソールで次のスタックトレースを参照してください。

Uncaught TypeError: Cannot read property 'call' of undefined 
t      @ main.js:10 
(anonymous function) @ main.js:44637 
window.webpackJsonp @ main.js:40 
(anonymous function) @ attendee.js:1 

それは文句を言う行はこれです:

return e[n].call(o.exports, o, o.exports, t) 

二行目((無名関数)main.js @:私はconsole.log(require('./attendee/containers/Profile/').default)をすれば、私は関数Aを取得し、

require('attendee/containers/Profile/').default 

注:44637)は、本質的にこれです私はなぜそれが未定義であるかわかりません。もちろん、コードを実行すると、コードは機能しますが、それ以上のチャンクはありません。

だから私はrequireで何か問題があります。どんなアイデアなのか?

私はこのプロジェクトでハッシュ履歴を使用しています - これが原因でしょうか?

更新:

this answerのように、バンドル・ローダーを試してみました。同じ結果。

+0

おかげに設定してください代わりに[]require.ensureの最初の引数には、事前に特定するモジュールの依存関係の配列を必要としています。ドキュメントにはチャンク名である3番目のオプションの引数があることに言及しています。それは無視されません、チャンクのファイル名はattendee.jsです - webpackはそれを使用します。あなたは同じ名前のチャンクにバンドルされるためにいくつかのルートを取得すると思われます。 –

+0

3番目のパラメータを削除しようとしました - チャンクファイルの名前以外の変更はありません - 今や2.js –

+0

ご迷惑をおかけして申し訳ございません。問題解決のためのアドバイスはありません。 –

答えて

0

あなたはほぼそこにいます!これを試してください:あなたは明示的にタグの提案のための['attendee/containers/Profile']

(location, cb) => { 
    require.ensure(['attendee/containers/Profile'], (require) => { 
    cb(null, require('attendee/containers/Profile').default) 
    }) 
} 
+0

私は実際にそれを試しました - 同じ結果 –

+0

'attendee/containers/Profile'がどのように見えるか分かりますか? –

+0

'Profile'は、たくさんのものをインポートします。すべてを配列に入れなければなりませんか?私が読んだことから、webpackは動いて、私のためのすべての依存関係を見つけるべきです... –

関連する問題