webpack を利用して sass(scss) をコンパイルする
はじめに
webpack を利用して sass(scss) をコンパイルします。
注意事項
コマンドプロンプトから npm を実行するために、node.js がインストールされている必要があります。
目次
環境
- OS : Windows 7 Pro 64bit
- その他 : npm 3.10.10, webpack 2.2.1
sass(scss) とは
sass とは、Syntactically Awesome Style Sheets の略で、成熟した、安定した、プロフェッショナルなグレードの css 拡張言語です。
変数、ネストされたルール、ミックスイン、インラインインポートなどを完全に css 互換の構文で使用することができます。
sassには2つの構文がありそれぞれ拡張子がscssとsassとなっています。
scss 構文
scss は、css の構文を拡張したもので、括弧やセミコロンを使用します。
1$color: #ccc; 2 3body { 4 color: $color; 5}
sass 構文
sass は、より簡潔な css の記述で、セレクタのネストを示すために括弧ではなく字下げを使用し、セミコロンではなく改行を使用してプロパティを分離します。
1$color: #ccc 2 3body 4 color: $color
環境の作成
webpack を利用して、sass をコンパイルするための環境を作成します。
package.json を作成する
以下のコマンドを入力して、package.json を作成します。
1> npm init
webpack をインストールする
webpack コマンドを利用するために、webpack をグローバルにインストールします。
1> npm install -g webpack
必要なモジュールをインストールする
scss をコンパイルするためのモジュールをインストールします。
1> npm install --save-dev css-loader style-loader sass-loader node-sass webpack
- css-loader : css を利用するためのモジュールです。
- style-loader : DOM に
<style>
タグを挿入するためのモジュールです。css-loader と組み合わせるよう推奨されています。 - sass-loader : sass を css にコンパイルするためのモジュールです。
- node-sass : node.js で sass をコンパイルするためのモジュールです。
css のファイルを作成するために、ExtractTextPlugin をインストールします。webpack のバージョンが 2 以上の場合、普通にインストールすると、依存関係がエラーとなってしまうため、現状で最新のバージョン (v2.0.0-rc.3) をインストールします。
1> npm install --save-dev extract-text-webpack-plugin@v2.0.0-rc.3
sass ファイルを作成する
ファイルを作成する前にフォルダ構成を以下のようにします。/src/scss フォルダに、コンパイル前の scss ファイルを入れておき、コンパイルしたものを /public/css フォルダに出力していきます。
1root 2 ┣ public 3 ┃ ┗ css 4 ┣ src 5 ┃ ┗ scss 6 ┃ ┗ index.scss 7 ┗ package.json
index.scss の中身を以下のように書いておきます。
index.scss1$color: #ccc; 2 3body { 4 color: $color; 5 6 header { 7 color: #fff; 8 } 9}
webpack の設定ファイルを作成する
webpack を利用してコンパイルするために、webpack.config.js を作成し、中身を以下のように記述します。
webpack.config.js1const path = require('path'); 2const ExtractTestPlugin = require('extract-text-webpack-plugin'); 3 4module.exports = { 5 entry: { 6 index: './src/scss/index.scss' 7 }, 8 output: { 9 path: path.join(__dirname, 'public/css'), 10 filename: '[name].css' 11 }, 12 module: { 13 loaders: [ 14 { 15 test: /\.scss$/, 16 loader: ExtractTestPlugin.extract({ 17 fallback: 'style-loader', 18 use: 'css-loader!sass-loader' 19 }) 20 } 21 ] 22 }, 23 plugins: [ 24 new ExtractTestPlugin('[name].css') 25 ] 26};
webpack でコンパイルを実行する
以下のコマンドを入力して、sass のコンパイルを行ないます。
1> webpack
public の css フォルダ内に index.css のファイルが作成されます。
1root 2 ┣ public 3 ┃ ┗ css 4+ ┃ ┗ index.css 5 ┣ src 6 ┃ ┗ scss 7 ┃ ┗ index.scss 8 ┣ package.json 9 ┗ webpack.config.js
index.css1body { 2 color: #ccc; } 3 body header { 4 color: #fff; }
その他
出力ファイルをフォルダ分けする
出力ファイルを別のフォルダにする場合は、entry の左側をフォルダ階層にします。
webpack.config.js1 entry: { 2 index: './src/scss/index.scss', 3 'user/index': './src/scss/user/index.scss' 4 },
以下のように別フォルダに css が作成されます。
1root 2 ┣ public 3 ┃ ┗ css 4+ ┃ ┣ user 5+ ┃ ┃ ┗ index.css 6 ┃ ┗ index.css 7 ┣ src 8 ┃ ┗ scss 9 ┃ ┣ user 10 ┃ ┃ ┗ index.scss 11 ┃ ┗ index.scss 12 ┣ package.json 13 ┗ webpack.config.js
css を圧縮する
css を圧縮する場合は、css-loader に minimize パラメータを指定します。
webpack.config.js1 loader: ExtractTestPlugin.extract({ 2 fallback: 'style-loader', 3// use: 'css-loader!sass-loader' 4 use: 'css-loader&minimize!sass-loader' 5 })