レガシーブラウザと向き合うNuxt.js

自己紹介

大脇健吾(わっぴー)

面白法人カヤック

技術部 Lobiチーム

 

@kengotoiro

様々なゲームの情報交換やユーザー同士の交流を楽しむ

ゲーム好きが集まるコミュニティサービス。

WEB、iOS、Androidアプリがあります。

 

 

Lobiとは

Lobi Web版の改修

Angular 1.4

Nuxt 2.3.4

パフォーマンス改善面は良好

Angular版

Nuxt版

レガシーブラウザへの配慮

 

レガシーブラウザへの対応は必要ですか?

辛かったこと

・Nuxtが1系→2系の移行期だった

・ドキュメントがまだ1系だった

・build時のプラグイン周りが結構変わっていた

・最新のドキュメントを意識するの大事!

・リリースノートを見る!

・どんなプラグインが走っているのか知っておく

反省点

こんなことを話します

・build時にどんなプラグインが使われているのか

・機能拡張する際はどうすれば良いか

・よりラクにブラウザ対応をするための方法

postcss-preset-env

デフォルトの設定で下記が有効になっている。

・autoprefixer

・Stage 2 features

 

基本はこいつに任せてしまえばOK!

CSSについて

対象ブラウザの範囲を設定する場合は、

browserlistをpackage.jsonに記入することで設定できる。

"browserlist": [
    "last 2 versions",
    "ie 11"
]

別途設定が必要なものがある場合は、

nuxt.config.jsに指定する

build: {
    postcss: {
        plugins: {
            'post-css-preset-env' :  {
                autoprefixer: { grid: true }
            }
        }
    }
}

※デフォルトではfalseになっているのでtrueにする必要がある

@babel/preset-env

デフォルトの設定

build時にjsをコンパイルしてくれる

 

 

JSについて

CSS同様package.jsonに記述した

browserlistで対象範囲を設定できる

これだけではブラウザによっては
動かないものもあります。

Polyfillが必要!

BabelとPolyfillの違い

Babel

新しい構文で書かれたものをレガシーブラウザでも動くように変換する

ex. class構文、アロー関数、const、let など

Polyfill

新しい機能をレガシーブラウザで動くように変換する

ex. Promise, symbol, intersection observer など

Polyfill.io

Polyfill.ioのおすすめポイント

設置がラク

nuxt.config.js のhead部分に追記するだけでOK!

head: {
  script: [
    {
      src: 'https://polyfill.io/v3/polyfill.min.js?features=IntersectionObserver'
    }
  ]
}

features以降にpolyfillを適用させたい範囲を指定できます。

この機能だけ効かせたいというピンポイントな指定からes5〜のような広範囲の指定も可能

Polyfill.ioのおすすめポイント

Nuxtの仕様変更に消耗しない

Polyfill.ioのおすすめポイント

ブラウザ毎に差分のPolyfillを返してくれる

Safari

Chrome

必要な分だけ返している!!

モダンブラウザは読み込み量が減る

レガシーブラウザでもきちんと動作する

😇

まとめ

・CSS

 

・JavaScript

@babel/preset-envがコンパイルしてくれる

PolyfillはPolyfill.ioを使うとラクに設定できる

postcss-preset-envがよしなにやってくれる

別途機能拡張するときはnuxt.conig.jsに書く

Lobiに興味がある方はこちらから

レガシーブラウザと向き合うNuxt.js

By Kengo Oowaki

レガシーブラウザと向き合うNuxt.js

  • 7,532