Next.jsでoptimizeした画像を自動的に適用する方法
Lighthouseなどで画像がデカイとか言われる
個々の画像の処理は面倒
なので、自動化する
- まずはnext-optimized-imagesをいれる
- さらに必要なライブラリを追加で入れる
- JPEGなら
imagemin-mozjpeg
- PNGなら
imagemin-optipng
- WEBPなら
webp-loader
- Responsiveな画像を用意したいなら
responsive-loader
とsharp
...など
- JPEGなら
- 併せてnext-compose-pluginsも入れる(入れなくても良いが、next.config.jsを書く時に綺麗に纏められる)
- 下のように
next.config.js
を設定する(コメント部分はnext-optimized-imagesのデフォルト) - 画像をリンクする際には
/public
からの絶対パスではなく、相対パスでrequire(...)
する(例:<img src={require("...")} />
) - devではoptimizeされないので注意(
optimizeImagesInDev: true
でdevでも動くとあるが、next.jsがハングアップする模様...) - 念のために再起動する
-
yarn build
で画像のパスが変わっているか確認
next.config.js
const withPlugins = require("next-compose-plugins")
const optimizedImages = require("next-optimized-images")
const nextConfig = {
// あれば
}
module.exports = withPlugins(
[
[
optimizedImages,
{
// these are the default values so you don't have to provide them if they are good enough for your use-case.
// but you can overwrite them here with any valid value you want.
// inlineImageLimit: 8192,
// imagesFolder: 'images',
// imagesName: '[name]-[hash].[ext]',
// handleImages: ['jpeg', 'png', 'svg', 'webp', 'gif'],
// optimizeImages: true,
// optimizeImagesInDev: false,
// mozjpeg: {
// quality: 80,
// },
// optipng: {
// optimizationLevel: 3,
// },
// pngquant: false,
// gifsicle: {
// interlaced: true,
// optimizationLevel: 3,
// },
// svgo: {
// // enable/disable svgo plugins here
// },
// webp: {
// preset: 'default',
// quality: 75,
// },
},
],
],
nextConfig
)
require(...)する時に相対パスではなく、絶対パスでやりたい場合
next.config.js
const { resolve } = require("path")
const nextConfig = {
webpack: (config) => {
// next-optimized-images
// 名前は何でも良い(@p、~images、@publicImages ...)
config.resolve.alias["@public"] = resolve(__dirname, "public")
return config
},
}
next.config.js
const { resolve } = require("path")
const nextConfig = {
webpack: (config) => {
// next-optimized-images
// 名前は何でも良い(@p、~images、@publicImages ...)
config.resolve.alias["@public"] = resolve(__dirname, "public")
return config
},
}
こうしておいて、/publicからいつものように参照するように@public
から始める(名前は何でも良い)
...
...
return(<img src={require("@public/../../")} />)
...
...
Author And Source
この問題について(Next.jsでoptimizeした画像を自動的に適用する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/github0013@github/items/8d1dfa25374e77861156著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .