Next.jsとStorybookでSCSS変数を使えるようにする方法をまとめます。
環境
Storybook: 6.5.16
Next.js: 13.1.6
ディレクトリ構成
root
├── .storybook
│ ├── main.js
│ └── preview.js
├── assets
│ └── scss
│ ├── _foundation.scss // mixins, variablesの_index.scssを@forward で読み込み
│ ├── mixins
│ │ ├── _breakpoint.scss // mixins指定
│ │ └── _index.scss // _breakpoint.scssを@forward で読み込み
│ └── variables
│ ├── _colors.scss // 変数指定
│ └── _index.scss // _colors.scssを@forward で読み込み
├── next-env.d.ts
├── next.config.js
├── package.json
├── public
├── src
└── tsconfig.json
SCSSを使用する準備
Next.js
Next.jsでSCSSを使用するためにはsassをインストールします。
yarn add -D sass
そして next.config.js に sassOptions を追加します。
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
// ↓ここを追加
sassOptions: {
additionalData: `@use "./assets/scss/_foundation.scss" as *;`,
},
// ↑ここを追加
}
module.exports = nextConfig
これでNext.js内でSCSS変数が使えるようになりました!
Storybook
StorybookでSCSSを扱うためには、style-loader, css-loader, sass-loaderが必要なので、下記コマンドでインストールします。
yarn add -D sass, style-loader, css-loader, sass-loader
各種ローダーをインストール後、.storybook/main.jsにローダーの処理を追加します。
module.exports = {
// ~ 略 ~
// ここから追記
webpackFinal: async (config) => {
config.module.rules.push({
test: /\.scss$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: {
auto: true,
},
},
},
{
loader: 'sass-loader',
options: {
additionalData: `@use "./assets/scss/_foundation.scss" as *;`,
},
},
],
})
return config
},
}
これでNext.jsとStorybookでSCSS変数が使えるようになりました!