npm-scriptsでSCSSをコンパイルする環境を構築する方法

今まではgulpを使ってきたのですが、最近はnpm-scriptsが流行りつつあります。
というのも、gulpだとどうしてもパッケージを大量に管理する必要があったり、gulpfile.jsがかなり複雑になりがちです。
package.jsonにある程度まとめて記述することで、管理するファイルも少なくなり、開発環境もシンプルになります。
今回はそんなnpm-scriptsで、SCSSのコンパイル方法についてまとめておきます。
npm scriptsを使う準備
gulpを使ったことがある人であれば問題ありませんが、npmを使う必要があるのでNode.jsをインストールしている必要があります。
過去にいくつか記事にしているので、まだインストールしていない人はそちらを参考にインストールしてください。
現時点では、nodenvを使ってインストールするのをオススメしています。
package.jsonの生成と必要パッケージのインストール
ターミナルで作業ディレクトリを開いて、下記のコマンドを入力します。
$ npm init -ypackage.jsonが生成されていればOKです。
次に下記のコマンドでそれぞれ必要となるパッケージをインストールします。
今回はSCSSのコンパイルに必要な最低限のパッケージのみにしています。
## SCSSのコンパイル
$ npm i -D node-sass
## ベンダープレフィックスの付与(Autoprefixer)とCSS圧縮
$ npm i -D postcss-cli cssnano autoprefixer
## ファイル変更の監視
$ npm i -D watch
## タスクを同時に実行する
$ npm i -D npm-run-allこれで必要なパッケージは揃いました。
package.jsonの設定
package.jsonを開いて、"scripts"の部分に下記を追加します。
"scripts": {
"all" : "run-p watch",
"watch": "watch 'run-s scss postcss' ./src/assets/scss",
"scss": "node-sass src/assets/scss/style.scss -o src/assets/css --source-map src/assets/css",
"postcss": "postcss src/assets/css/style.css -o src/assets/css/style.min.css"
},パス部分はフォルダ階層に合わせて調整が必要ですが、これで保存すればOKです。
この"scripts"部分に書くのがnpm scriptです。
基本的には下記の書き方になりますが、その辺はパッケージによって微妙に変わったり、オプションがあったりします。
"タスク名": "パッケージ名 元にするファイル指定 生成後のファイル指定",Post CSSの設定
今回はAutoprefixerやcssnanoといったPost CSSを使用しているので、pakcage.jsonと同じ階層にpostcss.config.jsを作成して、下記のコードを入力しておきます。
module.exports = {
plugins: [
require('cssnano')({
preset: 'default',
})
]
}次に、package.jsonと同じ階層に.browserslistrcを作成して、下記のコードを入力しておきます。
> 0.5%
last 2 versions
ie >= 11
Android >= 4とりあえずこれでAutoprefixerとcssnanoの設定は完了です。
実行方法
ターミナルでpackage.jsonと同じ階層を開いて、下記のコマンドを実行します。
npm run all特定のタスクのみを実行したい場合は、下記のようにnpm runのあとに、設定したタスク名を入力すれば実行できます。
npm run scss


gulp-sass 5の「does not have a default Sass compiler」エラーを解消する
Visual Studio CodeでDart Sassのコンパイルができる拡張機能「DartJS Sass Compiler and Sass Watcher」
WordPressのContact Form 7で送信時に回転アイコンが出たまま止まってしまうときのチェックリスト
Visual Studio CodeでSVGをプレビューする拡張機能「SVG Preview」
Vue.jsを使う人が最低限導入しておきたいVisual Studio Codeの拡張機能
横幅が広がったときの挙動が変わる!CSS Gridの「auto-fill」と「auto-fit」の違い
WordPressで「予約投稿の失敗」となってしまう場合の対処方法
Android実機で表示しているサイトを、Chrome開発者ツールで開いて検証する方法
WebPに対応して画像サイズを最適化する方法
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Figma × Keyboard Maestroでどこまで効率化できる?
マウス操作の完成度が高いウインドウリサイズアプリ「Magnet」
Macで複数ディスプレイを使っている場合に便利な設定集
AppCleanerでMacアプリを関連ファイルごと完全に削除する
操作に没頭できる!Firefox版 Arcのようなブラウザ「Zen Browser」
chezmoi(シェモア)で始めるdotfiles管理
GitHubの通知を見逃さない!通知に特化したアプリ「Gitify」
Keyboard Maestroの変数基礎
Neovimを使い始める最初の一歩として便利な「LazyVim」
ウェブサイトをmacOSアプリとしてラッピングする「Unite Pro」