スタイルシートのバンドル化ってどういうこと?一見、複数のCSSファイルを1枚のCSSファイルにしてくれる仕組みのような気がしますが、それは違います。それならSASSを使えばスッキリと済むはずです。
ここで行うのはCSSファイルをJavaScript化してさらにstyle属性でCSSを書き出すものです。
そのためには、`css-loader/style-loader`という仕組みを使います。css-loaderはスタイルシートを読み込むためのものです。
また、style-loaderはstyle要素としてHTMLに反映するものです。
簡単なスタイルシートをsrcフォルダに追加しておきます。
h1{ color:blue; }
`css-loader/style-loader`の導入
npm install --save-dev css-loader style-loader
次に、webpack.config.jsに`module:{}`部分を追記します。
module.exports = { entry:'./src/index.js', output:{ path:`${__dirname}/dist`, filename:'main.js' }, devServer:{ contentBase:'./dist' }, module:{ rules:[ { test: /\.css$/, use:[ 'style-loader', 'css-loader' ] } ] } }
あとはindex.jsに`import ‘./style.css’`を追加します。
`npm start`でブラウザが開きCSSが効いていれば成功です。
index.htmlをブラウザの検証でコードを確認するとheadタグ内にstyleタグが生成されてその中にCSSが記述されているのが確認できます。
スタイルシートを別ファイルにしたい
通常はembedタイプのスタイル設定ではなく別ファイルにする場合が多いです。
この場合はExtractTextPluginを使用します。
ExtractTextPluginの導入は次のようにします。
npm install --save-dev extract-text-webpack-plugin@next
webpack.config.js
module.exports = { entry:'./src/index.js', output:{ path:`${__dirname}/dist`, filename:'main.js' }, devServer:{ contentBase:'./dist' }, module:{ rules:[ { test: /\.css$/, use:ExtractTextPlugin.extract({ use:'css-loader' }) } ] }, plugins:[ new ExtractTextPlugin('style.css'), ] }
ここで再度ビルドします。
npm run build
distフォルダにstyle.cssが生成されます。
index.htmlファイルにlink要素でstyle.cssとリンクさせて正しく表示されればOKです。