2016-10-10 8 views
2

Reactについて少し調べて、CSS/SCSSモジュール処理のためにsass-loaderを試し始めました。 Iすでに完全なセットアップのほとんどをしましたが、私は私が対処する方法が本当にわからない問題を抱えて、私は次のシナリオでそれを提示:WebpackとSass-Loaderファイルのインポート順

ComponentA.jsx

import React from 'react'; 
import ComponentB from './app/components/ComponentB.jsx'; 

// Importing Core CSS module for component A 
require("./ComponentA.scss"); 

export default class ComponentA extends React.Component{ 

    constructor(){ 
    ... 
    } 

    render(){ 
    return (
     <div> 
      <ComponentB /> 
     </div> 
    ); 
    } 
} 

webpack.config.js

ComponentB.jsx

import React from 'react'; 

// Importing CSS module for component B with some overriding content for component A 
require("./ComponentB.scss"); 

export default class ComponentB extends React.Component{ 

    constructor(){ 
     ... 
    } 

    render(){ 
    return (
     ... 
    ); 
    } 
} 

このセットアップから

var path = require("path"); var ExtractTextPlugin = require("extract-text-webpack-plugin"); module.exports = { devServer: { contentBase: path.join(__dirname, "../build") }, entry: path.join(__dirname,"../app/ComponentA.jsx"), module:{ loaders: [ { test: /\.jsx?$/, loader: 'babel', query: { presets: ['react', 'es2015'] } }, { test: /\.(scss|css)$/, loader: ExtractTextPlugin.extract(['css','sass']) }, ... ] }, output: { path: path.join(__dirname, "..", "build"), filename: "bundle.js", publicPath: "/" }, plugins: [ new ExtractTextPlugin( "style.css", { allChunks: true } ) ] }; 

は、WebPACKのは期待通りに働いて、新しいファイルを作成しのstyle.css(事実上の当然私は開発によなど)、しかし... SCSSコンテンツファイルは順番ことでレンダリングされませんでした私はそれがそうであると思った。

style.cssにコンテンツは以下のように配置した

  • ComponentB.scssコンテンツ
  • ComponentA.scssコンテンツ

代わりの:

  • ComponentA。 scssコンテンツ
  • ComponentB.scssの内容

私はそれが階層にあることを意味しました。これは、コンポーネントAベースCSSをオーバーライドする場合、階層順でファイルをマージするためにwebpackとsass-loaderが必要になるという点で問題です。

ので、この後のご質問は、次のようになります。

私はそれが木の上を通過する際に、モジュールをロードするためにSASS-ローダーを設定するにはどうすればよいですか?

またはさらに簡単な...

これを行うには良い方法はありますか?

答えて

2

スタイルシートの場合でも、リアクションは自己完結したエンティティとして考える必要があります。 JavaScriptやJSX(または一般的なマークアップ)だけでなく、CSS(またはSCSS)もそうです。

これは、ローカルスタイルの最小限のものとともに、ローカルCSSを使用することが望ましい理由が多いためです。私は、あなたが同じことをすることをお勧めします:あなたはそれをクリティカルなCSSと考えることができる、グローバルスコープでComponentAとComponentBのいくつかのスタイルを移動し、それぞれをオーバーライドするローカルスタイルを持っています。

スタイルをローカルにする方法は、おそらくコンテナに包まれた:localという接頭辞を追加することです(つまり、あなたのSCSSファイルがインラインスタイルに変換されることに言及する価値はあります。多くの場合、それは認識されたパフォーマンスと最初のペイントに役立ちます。

Read more about it here

+1

お返事ありがとうございます!あなたが提供した情報の中でlocal-cssについて読んだことがあります。私の提供するシナリオでは面白くて機能的だと思われます。 –

+0

_二重投稿して申し訳ありませんが、前のコメントでアイデアを完成しませんでした。_ ExtractTextPluginが作成された理由は、CSSを分割して縮小する理由データはコンポーネントによって使用されています。 この場合、CSSページを「必要とする」という目的に反しないのですか?それとも、インラインCSSを使うのが本当に良いケースでしょうか? –

+0

ローカライズする必要のあるクラスに対しては、依然として 'require'を使用して、必要なCSSファイルに':local'を追加することができます。コンパイル時にインライン展開されますが、それについて心配する必要はありません。これはもちろん、CSSファイルはすべてのページにロードされるのではなく、必要なページにロードされるという利点があります。 [ここ](https://github.com/erikras/react-redux-universal-hot-example/blob/master/docs/InlineStyles.md)は、あなたがもっと興味を持っているならば、それに関する少しの資料です。 –

関連する問題