🎨
Sassの変数を環境変数で切り替える
こんにちわ、ちょっと株式会社 エンジニアのhanetsukiです。
ソースコードをコンパイルするときに、NODE_ENVという環境変数をよく使いますよね。
'development'とか'production'とかいうやつです。
今回私が携わっていた案件で、このNODE_ENVが切り替わるタイミングでSassの変数いじりたいなというケースがあったので、その忘備録としてこの記事を書きました。
リポジトリ
今回使う環境
私が今回実施した環境です。
- Next.js v12.1
- css modules(sass)
TL;DR
next.config.js
// eslint-disable-next-line @typescript-eslint/no-var-requires
const path = require('path')
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
sassOptions: {
includePaths: [path.join(__dirname, 'src/styles')],
additionalData: `@use "var.${process.env.NODE_ENV}.scss" as environment;`,
},
}
module.exports = nextConfig
src/styles/var.production.scss
$env: production;
src/styles/var.development.scss
$env: development;
src/styles/global.scss
html {
--env: #{environment.$env};
}
--env: development; or --env: production;
解説
今回肝となるのは、additionalData
というオプションです。
これは、scssファイルの先頭にオプションとして渡した情報を追加するというものになります。
GitHubのサンプルでも同様にNODE_ENV情報を渡していることから、環境変数等で利用するのを目的とされているのかもしれません。
今回は、環境変数を用いて特定のファイルの@use
を追記するようにしました。
理由としては、変数は必ずしも1つではないかもしれないということです。
都度オプションに追記しても良いですが、ファイル毎に渡せるようにしておいた方が融通が効きやすかったりするので、今回はそのように対応しました。
また、今回はNext.jsを用いましたが、このオプションはsass-loaderの設定なので、他の環境でも実現可能です!是非自分の環境でもお試しください!
ちょっと株式会社(chot-inc.com)のエンジニアブログです。 フロントエンドエンジニア募集中! カジュアル面接申し込みはこちらから chot-inc.com/recruit/iuj62owig
Discussion