2016-11-04 2 views
0

は、私は、次の高次の成分を持っていると言う以上は、動的であることのWebPACKの動的高次コンポーネントにモジュールを必要

FormFactorSensitiveWrapper(Home, 'pages/home'); 

目標私たちがデスクトップ対モバイル固有のバンドルをコンパイルしているかどうかに依存して、モジュールで必要なスタイリングファイルの切り替え。

このアプローチは動作しますが - かろうじて - WebPACKのコンテキストを決定するために、一見できず、代わりにそのチャンクへstyle、フォルダ内のすべてのファイルをコンパイルしているように私は、バンドルのコンパイル+非常に肥大化したチャンクで致命的でない警告を取得します。私はrequire.contextを使ってアプローチを試みましたが、それは別々の失敗がありました(私のwebpack.config.jsで定義されたローダーは適切に適用されていないようです)。

EDIT私は次のようにも(意味、環境変数の使用が問題を引き起こしていない)同じ問題につながることに注意してください:

const FormFactorSensitiveWrapper = function(Component, styleFilePath) { 
    if (styleFilePath) { 
     require('styles/' + styleFilePath + '.desktop');   
    } 

    const FormFactorSensitive = React.createClass({ 
     render: function() { 
      return <Component {...this.props} /> 
     } 
    }); 

    return FormFactorSensitive; 
}; 

答えて

0

私は問題であることを感覚を得ますもちろん

if (styleFilePath) { 
    switch (styleFilePath) { 
    case 'blue': 
     require('styles/blue.desktop'); 
    case 'red': 
     require('styles/red.desktop'); 
    } 
} 

これはすべてあなたのスタイルのWebPACKがあるrequire contextを作成することで、とにかくやっていることで、このファイルにインポートされることを意味:動的なパスを必要とし、より多くの冗長モードを使用してみてくださいダイナミックな表現のためのすべての可能な組み合わせを必要としようとしている('styles/' + styleFilePath + '.desktop'

あなたは2

+0

HMのWebPACKにWebPACKの1またはSystem.importrequire.ensureを使用する必要がありますcode splittingを使用したい場合は、そう私はあなたがいると思いますしかし、実際には、これは実際には、私のユースケースのための本当に面倒なコードにつながります(高次のコンポーネントが必要な可能性のあるすべてのパスを知る必要があるため) – Bobby

+0

私はそれを「乱雑」なコードと見なしません。実際には、例のコンポーネントがすべての可能なパスを知っているわけではありませんが、暗黙の知識がアプリケーション全体に広がっています。そうでなければ、パスが使用可能かどうかをどのように知っていますか? – guzart

+0

[webpack contexts](https://webpack.github.io/docs/context.html)とその[example](https://github.com/webpack/webpack/tree/)を見てください。 master/examples/require.context#examplejs)。 – guzart

関連する問題