86
64

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

create-react-appでSassやCSS-moduleを使う方法

Last updated at Posted at 2019-02-06

2018年10月のcreate-react-app v2のリリースで色々簡単になったようなので軽くメモ

少し前まで
create-react-appでSASSファイルを使う方法
こちらの方法でsassを使っていたのですが、今はよりシンプルに使えるようになったようなので、自分用にまとめておきます。

プロジェクトフォルダを生成

Node.jsが入っていれば下記のコマンドを叩いてすぐにスタートできます。(node.jsのインストールは割愛します)

$ npx create-react-app my-project

*npxコマンドはnpm version5.2以降から利用できます。
ローカルにcreate-react-appをインストールしていなくても、npmレジストリから最新版パッケージを取得してプロジェクトを生成してくれるとのことです。(詳細は公式ドキュメントを参照。)

Sassをインストール

$ cd my-project #プロジェクトフォルダに移動
$ yarn add -D node-sass 

yarnでなくnpm i -D node-sassでもokです。

以前は他にも色々インストールしたりwebpackのconfigいじったりで環境設定に時間がかかったわけですが、今はnode-sass入れるだけでOKなので話が早いです。

既存のcssファイルをscssにリネーム

./src/App.css./src/App.scssにリネームします。

それが終わったら、./src/App.jsの3行目にあるimport './App.css'の拡張子も併せてimport './App.scss'に変更します。

これだけでもうsassが使える状態になったので、下記コマンドでアプリを起動してみましょう。

$ yarn start

デフォルトのreactテンプレートが確認できると思います。

あとは./src/_variables.scssなど作成してApp.scssから読み込んでみたり、色々試してみるとちゃんと使えるのが確認できると思います。

ベンダープレフィックスについて

ベンダープレフィックスはcreate-react-appでbuildした際にautoprefixerが自動でつけてくれます。

autoprefixのコンフィグはpackage.json"browserslist"に記載されていますので、追記してIE10などに対応することもできます。

package.json
...
"browserslist": [
  ">0.2%",
  "not dead",
  "not ie <= 11",
  "not op_mini all"
]
...

CSS Module を使う方法

[name].module.cssまたは[name].module.scssのようにファイル名を付ければモジュール化されます。

cssモジュールのスタイルのアウトプットは[filename]_[classname]__[hash]のような命名規則で変換されます。


至ってシンプルで使いやすくて助かります

参考:How to use Sass and CSS Modules with create-react-app(英語)

86
64
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
86
64

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?