webpackでのcssファイルの設定
webpackでCSSをインラインのstyleではなく、CSSファイルとして出力する場合の設定。 extract-text-webpack-pluginを使ってCSSを別ファイルに出力する。
extract-text-webpack-plugin
Extract text from a bundle, or bundles, into a separate file.
バンドルからテキストを抽出して別のファイルに切り出すwebpackのプラグイン。CSSはこれで別ファイルにわける。
npmインストールして、webpack.config.babel.jsでimport
する。
$ yarn add --dev extract-text-webpack-plugin
import ExtractTextPlugin from 'extract-text-webpack-plugin'
CSSのloaderの設定を入れる。 Sassを使う場合は以下のようにloaderを指定する。
module: { rules: [ { test: /\.scss$/, use: ExtractTextPlugin.extract({ fallback: 'style-loader', use: ['css-loader', 'sass-loader'], }), }, ], },
app.jsでscssファイルをimportする。
import styles from './../scss/app.scss'
HTML側では生成されるCSSファイルとJSファイルを読み込むようにする。
<link rel="stylesheet" href="./css/app.css">
<script src="./js/app.js"></script>
最終的なwebpack.config.babel.js
JSまわりの設定とかを追加したwebpack.config.babel.jsは以下のような感じ。
import webpack from 'webpack' import path from 'path' import HtmlWebpackPlguin from 'html-webpack-plugin' import ExtractTextPlugin from 'extract-text-webpack-plugin' export default { entry: { app: [ './src/js/app.js', ], }, output: { path: path.join(__dirname, 'dist'), filename: 'js/[name].js', publicPath: '/', }, resolve: { modules: [ 'node_modules', path.join(__dirname, 'src'), ], }, module: { rules: [ { test: /\.(js|jsx)$/, exclude: /(node_modules)/, include: [ path.resolve(__dirname, 'src/js'), ], use: [ { loader: 'babel-loader', options: { cacheDirectory: false, }, }, ], }, { test: /\.(js|jsx)$/, exclude: /(node_modules)/, include: [ path.resolve(__dirname, 'src/js'), ], use: [ { loader: 'eslint-loader', options: { }, }, ], }, { test: /\.scss$/, use: ExtractTextPlugin.extract({ fallback: 'style-loader', use: ['css-loader', 'sass-loader'], }), }, ], }, devServer: { contentBase: './dist', publicPath: '/', port: 8080, }, plugins: [ new HtmlWebpackPlguin({ filename: 'index.html', inject: false, template: './src/templates/index.ejs', }), new ExtractTextPlugin('css/app.css'), ], }