2016-08-14 13 views
1

webpackレベルでCSSモジュールglobal vs local css issueを解決しようとしています。異なるクエリパラメータに応じて、異なるローダを条件付きで適用できますか?

今私が持っている最良の解決策は、ファイルにラベルを付け、それらに異なるローダーを実行することです。これは現実世界のプロジェクトで使用するのが面倒です。

{ 
     test: /\.module.less$/, 
     loader: 'style-loader!css-loader?modules&importLoaders=2&sourceMap&localIdentName=[local]___[hash:base64:5]!less-loader' 
} 
{ 
     test: /^((?!\.module).)*less$/, 
     loader: 'style!css!less' 
} 

どこか私はこれを書きたいアプリのコード内の私は、ファイルStyles.cssを

を持っているとしましょう:

var localCss = require('magicCSSLoader?local!./styles.css') 
require('magicCSSLoader?global!./styles.css') 

これは冗長ですが、

  1. 明示し、後で設定できます(localByDefault/globalByDefault)
  2. 同じファイルを異なる方法で処理することができ
  3. ビューのgitのポイントからのファイルのすべての時間の名前を変更するよりも、

だから、私の質問は:

それは条件付きで別のクエリのparamsに応じて、異なるローダーを適用することが可能です?

loader: function(content, query) { 
     if(query.local) { 
      return webpackMagic(content, 'style!css?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]') 
     } 
      return webpackMagic(content, 'style!css'); 
     } 

答えて

2

ソリューションはpitchローダー使って条件付きでモジュールを生成するために、次のようになります。

var loaderUtils = require('loader-utils') 

module.exports.pitch = function(remainingRequest) { 
    var query = loaderUtils.parseQuery(this) 
    if (query.local) { 
    return `modules.exports = require("!!style!css?modules!${remainingRequest}")`; 
    } else { 
    return `modules.exports = require("!!style!css!${remainingRequest}")`; 
    } 
} 
+0

これを本当に助けたが、私はSSRに現在stucked午前https://github.com/halt-hammerzeit/webpack -isomorphic-toolsは、これを把握すると更新されます。現在時間がない。 –

関連する問題