2020/11版:SCSS の開発環境を yarn run で構築する
今回は開発環境ということで cssnano を使った minify などは行わないところまでとします。
また、 git や npm のローカルの準備は既に終わってるものとします。
TL;DR
yarn init -y
yarn add sass --dev
# この後、必要なディレクトリを作成
package.json に以下追記
"scripts": {
"scss": "sass src/scss:public/css"
},
yarn scss
LibSass(node-sass) が非推奨になってた
2020/10/26 の勧告でLibSass(node-sass) が非推奨になってました。
ついに LibSass と DartSass の戦いに終止符が打たれて感慨深い(?)ですね。
というわけで今回の構築にも node-sass
ではなく sass
を使用します。
LibSass -> npm パッケージ名 node-sass
DartSass -> npm パッケージ名 sass
参考:
- node-sass(LibSass)からsass(DartSass)への移行 | Photosynthesic blog
- LibSass is Deprecated | Sass
- Dart Sass | Sass
- Dart Sass Command-Line Interface | Sass
何はともあれまず下準備
プロジェクトのディレクトリを作成(私は最初にGitHubにリポジトリを作ってcloneしてきます)して、
トランスパイル前のコードを保存する src
ディレクトリ と
トランスパイル後のコードを保存する public
ディレクトリ を作成する
git clone git@github.com:<userid>/my_project.git
cd my_project
mkdir src
mkdir src/scss
mkdir public
mkdir public/css
.gitignore を入れておく
GitHub で新規リポジトリ作成時に .gitignore を Node
設定とかで作成してるならそれでOK。
作成し忘れた時とかは gitignore.io とか使って生成した物を入れておきます。
vim .gitignore
# 編集して
git add .
git commit -m ":see_no_evil: add .gitignore"
- .gitignore.io
yarn を初期化して必要なパッケージを入れる
yarn init -y
# もちろんこれでも可 yarn init --yes
yarn add sass --dev
- yarn init | yarn
- yarn add | yarn
- sass | yarnpkg
ファイルを2つほど作る
今回は Many-to-many Mode (多対多) のトランスパイルを実施したいので
SCSSファイルを2つほど src/scss
に用意します。
ファイル名と中身は適当です。
global.scss
body {
margin: 0;
h1,
p {
margin: 0;
}
}
second.scss
b,
strong {
font-weight: bolder;
}
package.json に scripts を書く
こんな感じですね。
"scripts": {
"scss": "sass src/scss:public/css"
},
出来上がった package.json はこんな感じ
"name": "my_project",
"version": "1.0.0",
"main": "index.js",
"repository": "git@github.com:<userid>/my_project.git",
"author": "your name",
"license": "MIT",
"scripts": {
"scss": "sass src/scss:public/css"
},
"devDependencies": {
"sass": "^1.29.0"
}
yarn run する
yarn run hoge
の場合 run は省略できます。
yarn scss
はい、できました。やったぜ。
デフォルト設定で出力しているので source map も出力されてますね。
public/css はバージョン管理に含める必要はないので
.gitignore に足しとくといいでしょう。
今回のプロジェクトファイル一式はこちらです
多分出ると思う疑問の回答
なんで npm / npm script じゃないの?
- yarn が好きだからです
- 語感がいいですよね、やーん。
なんで gulp / webpack 使わないの?
- 使わずにイケたからです
- 今回は Many-to-many の出力にしたかったからです
トランスパイル? コンパイルじゃないの?
- Sass(SCSS) は「プログラミング言語を別の言語に変換」なのでトランスパイルが正しいはず。知らんけど。
そのほかの参考サイト
- npm(yarn) scriptでSCSSコンパイル機能付きの開発環境を構築する | torchiba blog
Discussion