webpack

[webpack]ど初心者がscssをコンパイルできるようにしてみた(for mac)

この記事は以下の記事の続きです。

[webpack]ど初心者がjsをコンパイルできるようにしてみた(for mac)初心者には難しいwebpackでのコンパイル…挫折した経験をもとに、わかりやすく解説いたします!(js編)...

モジュールのインストール

SCSSのコンパイルに必要なモジュールをインストールします。

必要なモジュールをざっくりと4つのグループに分けてご紹介します。

SCSSをコンパイルするモジュール

  • css-loader
  • style-loader
  • sass
  • sass-loader

画像などのファイルをコンパイルができるようにするモジュール

  • file-loader
  • url-loader

ベンダープレフィックスを付与するために必要なモジュール

  • autoprefixer
  • postcss
  • postcss-loader

jsとcssのファイルに分けてコンパイルするためのモジュール

  • mini-css-extract-plugin

SCSSをコンパイルする際に省略してくれるモジュール

  • optimize-css-assets-webpack-plugin
  • terser-webpack-plugin

ターミナルでpackage,jsonと同じ階層に移動し、以下のようなコマンドを実行します。

npm i -D css-loader style-loader

上記のようにモジュールの間をスペースで区切ると複数のモジュールをインストールすることができます。

webpack.config.jsを編集

webpack.config.jsファイルを以下のように編集します。

// js最適化
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
// css最適化
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
// css抽出
const TerserJSPlugin = require('terser-webpack-plugin');
 
// [定数] webpack の出力オプションを指定します
// 'production' か 'development' を指定
const MODE = "development";
 
// ソースマップの利用有無(productionのときはソースマップを利用しない)
const enabledSourceMap = MODE === "development";
 
module.exports = {
 // モード値を production に設定すると最適化された状態で、
 // development に設定するとソースマップ有効でJSファイルが出力される
 // watchモードを有効にする
 watch: true,
 mode: MODE,
//↓ソースマップの作成をON/OFF
 // devtool: "source-map",
 
 // メインとなるJavaScriptファイル(エントリーポイント)
 entry: `./src/js/app.js`,
 // ファイルの出力設定
 output: {
   //  出力ファイルのディレクトリ名
   path: `${__dirname}/dist`,
   // 出力ファイル名
   filename: "app.js",
 },
 
 module: {
   rules: [
     // Sassファイルの読み込みとコンパイル
     {
       test: /\.scss/, // 対象となるファイルの拡張子
       use: [
         // CSSファイルを書き出すオプションを有効にする
         {
           loader: MiniCssExtractPlugin.loader,
         },
         // CSSをバンドルするための機能
         {
           loader: "css-loader",
           options: {
             // オプションでCSS内のurl()メソッドの取り込みを禁止する
             url: false,
             // ソースマップの利用有無
     //↓ソースマップを作成(falseで作成しないようにできる)
             sourceMap: true,
             // 0 => no loaders (default);
             // 1 => postcss-loader;
             // 2 => postcss-loader, sass-loader
             importLoaders: 2,
           },
         },
         {
           loader: "postcss-loader",
           options: {
    //↓ソースマップを作成(falseで作成しないようにできる)
             sourceMap: true,
             postcssOptions: {
               plugins: [
                 // Autoprefixerを有効化
                 require("autoprefixer")({
                   // ☆IEは11以上、Androidは4.4以上
                   // その他は最新2バージョンで必要なベンダープレフィックスを付与する設定
                   browsers: ["last 2 versions", "ie >= 11", "Android >= 4"]
                 })
               ],
             },
           },
         },
         {
           loader: "sass-loader",
           options: {
    //↓ソースマップを作成(falseで作成しないようにできる)
             sourceMap: true,
           },
         },
       ],
     },
     {
//file-loaderでcssで使ったファイルがコンパイルされるようにする
       test: /\.(gif|png|jpg|eot|wof|woff|woff2|ttf|svg)$/,
       loader: 'file-loader',
       options:{
           name:'images/[name].[hash].[ext]'
       }
     },
   ],
 },
 
 plugins: [
   // CSSファイルを外だしにするプラグイン
   new MiniCssExtractPlugin({
     // ファイル名を設定します
     filename: "app.css",
   }),
 ],
 optimization: {
//コンパイル時に省略する
   minimizer: [new TerserJSPlugin({}),new OptimizeCSSAssetsPlugin({})],
 },
 performance: { hints: false } // コンパイルするファイルのサイズ無視
};

プラグインを読み込む

// js最適化
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
// css最適化
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
// css抽出
const TerserJSPlugin = require('terser-webpack-plugin');

module.exports内で使用するプラグインを読み込んでいます。

ターミナルで

npm run watch

でコンパイルを開始してみましょう。

.gitignoreでnode_modulesをgit管理対象から外す

node_modulesの内のファイル数は5000個を超えます。
5000個を超えると、1回で全てをプッシュすることは困難です。


そのため、node_moduleをgitの管理下から外す必要があります。
node_modulesが追加されても変更されても、gitに無視させる必要があるのです。

.gitignore
というファイルを作成し、node_moduleまでのパスを記載します。

node_moduleと同じ階層に.gitignoreを置いた場合は

node_modules

の1行のみでOKです。
これでnode_modulesをgitの管理対象から外すことができました。

まとめ

いかがでしょうか?

ちょっとややこしいですが、webpackではjsのプラグインの管理も行えるので、とっても便利です!

ぜひ使ってみてください。

おすすめ書籍

1冊ですべて身につくWordPress入門講座 [ Mana ]

価格:2,200円
(2022/10/12 21:45時点)
感想(2件)

動くWebデザインアイディア帳 [ 久保田涼子 ]

価格:3,080円
(2022/10/12 21:45時点)
感想(8件)

動くWebデザインアイディア帳 実践編 [ 久保田 涼子 ]

価格:2,860円
(2022/10/12 21:46時点)
感想(3件)