たくさんの自由帳
Androidのお話
たくさんの自由帳
投稿日 : | 0 日前
文字数(だいたい) : 2300
目次
本題
どういうこと
試してみる
検証結果
import { AndroidOutlined } from '@mui/icons-material'
import AndroidOutlined from '@mui/icons-material/AndroidOutlined'
本番ビルドは?
package.jsonにスクリプト追加
import { AndroidOutlined } from '@mui/icons-material'
import AndroidOutlined from '@mui/icons-material/AndroidOutlined'
開発時でもほしい
プラグインを入れる
.babelrcに追記
内部サーバー起動
ソースコード
どうもおはようございます。
このサイトはNuxt.jsなんですけどね初見さん(記述時時点)
Next.js
にMaterial UI
を入れたあと、import
の書き方次第でビルド時間が長くなってしまう。
import { AndroidOutlined } from '@mui/icons-material'
よりも
import AndroidOutlined from '@mui/icons-material/AndroidOutlined'
の方がビルド時間が高速になり、サイズが小さくなる
// index.tsx
import type { NextPage } from 'next'
import AndroidOutlined from '@mui/icons-material/AndroidOutlined'
const Home: NextPage = () => {
return (
<AndroidOutlined />
)
}
export default Home
// index.tsx
import type { NextPage } from 'next'
import { AndroidOutlined } from '@mui/icons-material'
const Home: NextPage = () => {
return (
<AndroidOutlined />
)
}
export default Home
どちらも同じアイコンを画面に表示するコードです
3.1 MB
965 kB
まじ?
Next.jsの静的HTMLエクスポートをして比較してみる
npm run export
コマンドを追加します
{
"name": "next-material-ui",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"export": "next build && next export"
},
Page Size First Load JS
┌ ○ / (5246 ms) 18.1 kB 85 kB
├ /_app 0 B 67 kB
├ ○ /404 194 B 67.2 kB
└ λ /api/hello 0 B 67 kB
+ First Load JS shared by all 67 kB
├ chunks/framework.0441fa.js 42.4 kB
├ chunks/main.62b8ca.js 23.3 kB
├ chunks/pages/_app.d6feaf.js 557 B
├ chunks/webpack.1a8a25.js 729 B
└ css/120f2e2270820d49a21f.css 209 B
Page Size First Load JS
┌ ○ / (444 ms) 19.3 kB 86.3 kB
├ /_app 0 B 67 kB
├ ○ /404 194 B 67.2 kB
└ λ /api/hello 0 B 67 kB
+ First Load JS shared by all 67 kB
├ chunks/framework.2191d1.js 42.4 kB
├ chunks/main.62b8ca.js 23.3 kB
├ chunks/pages/_app.d6feaf.js 557 B
├ chunks/webpack.1a8a25.js 729 B
└ css/120f2e2270820d49a21f.css 209 B
なんか後者の方がファイルサイズ大きいんだけど。
まぁ検証結果としては本番ビルドなら上記の書き方でもツリーシェイキング?で最適化が行われるのだと思う。だた時間はかかりますね、、、
https://mui.com/guides/minimizing-bundle-size/#when-and-how-to-use-tree-shaking
Babelを正しく設定すると同じパフォーマンスを出せるらしいです。
npm install babel-plugin-import --save-dev
プロジェクトのルートディレクトリ(package.jsonがあるフォルダ)に.babelrc
って名前のファイルを追加します。
追加したら、以下の内容を入れます。
{
"presets": [
"next/babel"
],
"plugins": [
[
"babel-plugin-import",
{
"libraryName": "@mui/material",
"libraryDirectory": "",
"camel2DashComponentName": false
},
"core"
],
[
"babel-plugin-import",
{
"libraryName": "@mui/icons-material",
"libraryDirectory": "",
"camel2DashComponentName": false
},
"icons"
]
]
}
npm run dev
以上です。これで有効になるはずです。
ほい