私は、CSSモジュールを(Webpack cssローダーを使用して)新しいReact=プロジェクトで使用しています。うまく機能しているにもかかわらず、 React Select 動作します。これは、react-select
のJSが認識しないlocal
classNamesを作成しようとするためだと思います。 .scss
ファイル全体をインポートしますが、ローカルではなくグローバルにスコープしますか?
通常、次のような2つのCSSローダーを定義します。
// Global CSS
// We make the assumption that all CSS in node_modules is either
// regular 'global' css or pre-compiled.
loaders.Push({
test: /\.css$/,
include: /node_modules/,
loader: 'style-loader!css-loader'
});
// CSS modules
loaders.Push({
test: /\.css$/,
exclude: /node_modules/,
loader: 'style-loader!css-loader?modules'
});
また、過去にアプリをCSSモジュールに移行しましたが、ファイル拡張子に基づいて規則を定義すると便利であることがわかりました。 {filename} .module.css === CSSモジュールvs {filename} .css ===グローバルCSS
// Global CSS
loaders.Push({
test: /\.css$/,
exclude: /\.module\.css$/,
loader: 'style-loader!css-loader'
});
// CSS modules
loaders.Push({
test: /\.module\.css$/,
loader: 'style-loader!css-loader?modules'
});
Webpack構成でcssローダーを使用する場合、通常、クエリ文字列で_?modules
_を有効にしてCSSモジュールをアクティブ化する必要があるため、デフォルトで_:local
_スコープをアクティブ化します。これは、変換せずに_.selector { ... }
_を宣言したい場合、それを:global(.selector) {}
に使用する必要があることを意味します。
SASSローダーを使用しているため、ベンダーのCSSを含める場合は、_@import "~react-select"
_を使用してインポートできます。あなたが言った問題は、これがすべてのセレクターをライブラリーからローカルに変換することです。これを避けるために、次のようなセレクタを使用する場合と同じ方法で、インポートを_:global
_で囲むことができます:_:global { @import "~react-select"; }
_
私のために働いている代替ソリューション(スクラッチからgithubの問題まで)は次のとおりです:
{
test: /\.css$/,
use: [{
loader: 'style-loader',
}, {
loader: 'css-loader',
options: {
modules: true,
},
}, {
loader: 'postcss-loader',
}],
}
例としてslick-carousel
を使用します。
// Import the libraries css without the module gear being applied
//
import '!style-loader!css-loader!slick-carousel/slick/slick.css';
// Import my applications css. `styles` will be the typical
// `slide_foo_xeh54` style set of module exports
// (depending how you have your css-loader
// configured
//
import styles from './Slides.css';
言い換えると、異なるローダー(!x!y)で具体的にインポートする場合を除き、すべてがcss-loaderのwebpack configファイルで設定されたオプションに従います。
多数の例外/グローバルがある場合、受け入れられたソリューションの方が良いかもしれません。