TL;DR
1. 以下のコマンドを実行してMUIのコアライブラリである@mui/material
、styled-components
とラッパーライブラリである@mui/styled-engine-sc
をインストールします。
$ yarn add @mui/material @mui/styled-engine-sc styled-components
2. package.json
で@mui/styled-engine
が参照するスタイルエンジンの指定を@mui/styled-engine-sc
に変更します。
{
"dependencies": {
- "@mui/styled-engine": "latest"
+ "@mui/styled-engine": "npm:@mui/styled-engine-sc@latest"
},
+ "resolutions": {
+ "@mui/styled-engine": "npm:@mui/styled-engine-sc@latest"
+ },
}
詳細
1. @mui/material
、styled-components
とラッパーライブラリである@mui/styled-engine-sc
をインストールします。
yarn add @mui/material @mui/styled-engine-sc styled-components
ライブラリをインストールしただけの状態でビルドすると以下のエラーが発生してしまいます。
ERROR in ./node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js 3:0-40
Module not found: Error: Can't resolve '@emotion/react' in '/app/node_modules/@mui/styled-engine/GlobalStyles'
ERROR in ./node_modules/@mui/styled-engine/StyledEngineProvider/StyledEngineProvider.js 3:0-47
Module not found: Error: Can't resolve '@emotion/react' in '/app/node_modules/@mui/styled-engine/
ERROR in ./node_modules/@mui/styled-engine/index.js 6:0-39
Module not found: Error: Can't resolve '@emotion/styled' in '/app/node_modules/@mui/styled-engine'
ERROR in ./node_modules/@mui/styled-engine/index.js 26:0-62
Module not found: Error: Can't resolve '@emotion/react' in '/app/node_modules/@mui/styled-engine'
2. スタイリングエンジン変更の設定
リファレンスにも書いてある通りなのですがstyled-components
をスタイリングエンジンに使用する場合はもう一手間加える必要があります。
MUIのコアライブラリである@mui/material
は内部で@mui/styled-engine
に依存しているのですが、@mui/styled-engine
のデフォルトの設定ではスタイリングエンジンにemotion
が指定されているので、スタイルエンジンの指定を@mui/styled-engine-sc
に変更する様に設定します。
@mui/styled-engine-sc
は公式リファレンスのInstallation
セクションに書いてあるようにyarn add
コマンドでインストールするのではなくpackage.json
を手書きで以下の様に書き換えてyarn install
する必要があります。
{
"dependencies": {
- "@mui/styled-engine": "latest"
+ "@mui/styled-engine": "npm:@mui/styled-engine-sc@latest"
},
+ "resolutions": {
+ "@mui/styled-engine": "npm:@mui/styled-engine-sc@latest"
+ },
}
その他
❗ Warning: Using styled-components as an engine at this moment is not working when used in a SSR projects. The reason is that the babel-plugin-styled-components is not picking up correctly the usages of the styled() utility inside the @mui packages. For more details, take a look at this issue. We strongly recommend using emotion for SSR projects.
CSSの名前を動的に決定する仕組みの関係からSSRで使用する場合に正しく動作しないとの事で、SSRで使用したい場合はemotion
をスタイリングエンジンに使用することを推奨しています。