【Webpack】SCSSをCSSにコンパイルする
パッケージインストール&Webpack設定
SCSSをCSSにコンパイルする必要最低限の設定は以下のとおりです。※html-webpack-pluginは、自動でインジェクトさせるためインストールしています。
npm i -D sass sass-loader css-loader style-loader html-webpack-plugin
Bashconst path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
mode: 'development',
output: {
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.(sa|sc|c)ss$/,
use: [
'style-loader',
'css-loader',
'sass-loader',
]
}
]
},
plugins: [
new HtmlWebpackPlugin({
inject: 'body',
filename: 'index.html',
template: './src/index.html'
})
]
}
webpack.config.jsCSSを別ファイルに分離させる
先程の設定では、スタイルがhtmlのheadタグ内にインジェクトされましたが、殆どの場合CSSは別ファイルとして管理したいことが多いでしょう。
この場合は、style-loader→mini-css-extract-pluginに変更します。
npm i -D mini-css-extract-plugin
Bashconst path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
mode: 'development',
output: {
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.(sa|sc|c)ss$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'sass-loader',
]
}
]
},
plugins: [
new MiniCssExtractPlugin({
filename: './css/style.css'
}),
new HtmlWebpackPlugin({
inject: 'body',
filename: 'index.html',
template: './src/index.html'
})
]
}
webpack.config.jsベンダープレフィックスを自動で付与させる
ベンダープレフィックスを自動で付与させるには、以下のパッケージをインストールします。
npm i -D postcss-loader autoprefixer
Bashconst path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
mode: 'development',
output: {
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.(sa|sc|c)ss$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader',
'sass-loader',
]
}
]
},
plugins: [
new MiniCssExtractPlugin({
filename: './css/style.css'
}),
new HtmlWebpackPlugin({
inject: 'body',
filename: 'index.html',
template: './src/index.html'
})
]
}
webpack.config.jsmodule.exports = {
plugins: [
require('autoprefixer')({grid: true})
]
}
postcss.config.jsベンダープレフィックスが付与されているか確認するには、.browserslistrcファイルに「> 0%」と設定し対象を全てのブラウザにします。そしてCSSでflexやgridなどを使い、出力されたファイルにベンダープレフィックスが付与されているか確認します。
> 0%
.browserslistrc【注意点】背景画像を使う
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
mode: 'development',
output: {
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.(sa|sc|c)ss$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader',
'sass-loader',
]
}
]
},
plugins: [
new MiniCssExtractPlugin({
filename: './css/style.css'
}),
new HtmlWebpackPlugin({
inject: 'body',
filename: 'index.html',
template: './src/index.html'
})
],
resolve: {
alias: {
'@': path.resolve(__dirname, 'src/images'),
},
},
}
webpack.config.js.hero {
background-image: url("@/sample.png");
}
.browserslistrc