Let's generate
everything
with Nuxt
NuxtMeetup#1
2018-03-28
@miyaoka
今日のお題
NuxtでGenerate関連の話をします
-
静的サイトジェネレータ Nuxtentについて
-
APIを全部キャッシュしてみる実演
ジェネってる?
-
はい
-
どちらかといえばそう
-
ふつう
-
どちらかといえばそうでない
-
そうでない
static siteが好き?
-
はい
-
どちらかといえばそう
-
ふつう
-
どちらかといえばそうでない
-
そうでない
いいですよね
(結論)
Nuxtent
-
https://github.com/nuxt-community/nuxtent-module
- いわゆる静的サイトジェネレータをNuxtで実現
- Nuxt Official modulesの一つ
- 近況
- Nuxt v1.0リリース以降対応できていなかったが、最近v1.4対応された
- 制作者は現在使っていないのでメンテナ募集中
Nuxtent: the goal
- Make using Nuxt as easy as using Jekyll, Hugo, or any other static site generator.
-
two main ways
-
By compiling all the data from markdown or yaml files based on configured rules.
-
By providing helper methods for dynamically accessing this data inside Nuxt pages.
-
-
also supports
-
The usage of content files in both static sites and dynamic applications.
-
The usage of async components inside markdown files.
-
compiling all the data
*.md to *.json
compiling all the data
*.md to *.json
compiling all the data
generate dynamic routes
providing helper methods
injected $content helper
data access
hosting server
ここからが本題
API Cache
ジェネってもファーストページが静的になるだけで遷移するとAPIと通信が必要になる
↓
ローカルの.mdコンテンツと同様に、APIレスポンスもファイルとして書き出しておけば良いのでは?
↓
やってみよう
やってみた
デモ鑑賞タイム
左右キーでアドレス表示がぶっ壊れるくらいの遷移が可能
それでは
詳細を見ていきます
modules/
contents.js
リポジトリのIssue、全部抜く
webpackのbuildに載せる
routesを登録してコンポーネントにpayloadを渡す
generate時はサーバー立てて吐いたファイルをaxiosで取得できるようにする
(※今回はpayloadで全てのコンポーネントに値を注入してるので必要無かった)
コンポーネント側から取得できるようにpluginを追加する
plugins/
requestContents.js
キャッシュしたAPIレスポンスファイルを取得
injectして各コンポーネントにデータ取得メソッドを提供
pages/
index.vue
generate時はmoduleから注入された値を使用、
非SSR時はプラグインからキャッシュを取得する
それStoreにしたほうがよくないですか?
そう思います
でもですよ
generateされた静的HTML
generateされた静的HTML
ヘッダ・スタイル
body要素
component、storeのデータ
generate時にstoreにデータを格納すると、全ページにstore内容が書き出されて
死
キャッシュしたAPIレスポンスのサイズが1MBとして、それが2500ページ全てに書き出されてしまうと2.5GB。ビルドも遅くなる
なので、データをファイル化して取得するようにしてるんですね
PWAは
@nuxtjs/pwa入れるだけ
一度読みこめば、もうサーバー要らない
generateのタイミング
どのぐらいgenerateできるのか
2718ページでgenerateに3分20秒
デプロイ完了までだと6分18秒
link: Netlifyのデプロイログ
Netlifyではビルドに15分以上かかるとabortするらしいのでほどほどにgenerateしたい
How Our Build Bots Build Sites | Netlify
(2016年の記事なので今は違うかも?)
宣伝
soussune(そうっすね)
というポッドキャストやってます
- フロントエンド、Vueの話が多いです
- サイトはもちろんNuxt製
誰
今はヒゲ生えてません