expressのミドルウェアとしてnuxtをfirebaseで公開するのをあちらこちらで見ましたが、
expressなしでも行けるのでは・・・?ということで、やってみました。
環境は、
・Windows10
・Visual Studio Code
・Node 10.15.3
使用。
Firebaseコンソールでプロジェクトは制作済みとします。
####【目次】
(1)Firebase の初期化
(2)functions下にnuxtをインストールする
(3)Functions の準備およびHostingからFunctionsを呼ぶまで。
(4)ビルド&デプロイ
では、やってみます。
(1)Firebase の初期化
Visual Studio Codeのコンソールなどで、
プロジェクトフォルダに移動して、以下実行
CLIのインストール
npm install -g firebase-tools
ログインと初期化
firebase login
firebase init
? Are you ready to proceed? → Y
? Which Firebase CLI features do you want to set up for this folder? Press Space to select features, then Enter to confirm your choices. (Press <space> to select) → Functions、Hosting
? Select a default Firebase project for this directory: (Use arrow keys) → 作成済みプロジェクトを指定
--- Functions関連の質問 ---
? What language would you like to use to write Cloud Functions? (Use arrow keys) → Javascript
? Do you want to use ESLint to catch probable bugs and enforce style? (y/N) → n
? Do you want to install dependencies with npm now? → Y
--- Hosting関連の質問 ---
? What do you want to use as your public directory? (public) → そのままenter
? Configure as a single-page app (rewrite all urls to /index.html)? → N
(2)functions下にnuxtをインストールする
nuxtのインストール
cd functions
npx create-nuxt-app nuxt-app
? Project name → なんでもOK
? Project description → なんでもOK
? Author name → なんでもOK
? Choose a package manager → Npm
? Use a custom UI framework (Use arrow keys) → None
? Use a custom server framework (Use arrow keys) → None
? Choose Nuxt.js modules (Press <space> to select, <a> to toggle all, <i> to invert selection) →なし
? Choose linting tools (Press <space> to select, <a> to toggle all, <i> to invert selection) →なし
? Use a custom test framework (Use arrow keys) → none
? Choose rendering mode (Use arrow keys) → Universal
nuxtのルートフォルダを一つ上のfunctionsに移動します。
functions/nuxt-app/package.jsonから
functions/package.jsonに、scripts、dependencies、devDependenciesを移動します。
scriptのstartがダブりますが、もともとあったほうを削除。
"start": "npm run shell",→こちらを削除
"start": "nuxt start",
ついでに、enginesのnodeバージョン指定を8から10に変更しておきます。
"engines": {
"node": "10"
},
functions/nuxt-app/.git
functions/nuxt-app/node_modules
functions/nuxt-app/package.json
functions/nuxt-app/package-lock.json
は、不要なので、削除
package.json、package-lock.jsonを除くファイル(※フォルダはそのまま)を上の階層に移動
.editorconfig
.gitignore(※上書きでOK)
nuxt.config.js
README.md
nuxt.config.jsに、以下追加。
srcDir: 'nuxt-app',
build: {
publicPath: '/assets/'
}
上記すべて終わったら、functionsフォルダで
npm install
を実行しておく。
(3)Functions の準備およびHostingからFunctionsを呼ぶまで。
1) /functions/nuxt.config.js
export default {
↓
module.exports = {
後ほどrequireで読み込むため。
詳細はわからないのですが、importよりもrequire推奨らしい。
2) /functions/index.js
const functions = require('firebase-functions')
const { Nuxt } = require('nuxt')
const config = require('./nuxt.config.js')
const nuxt = new Nuxt(config)
exports.nuxtServer = functions.https.onRequest(async (request, response) => {
const result = await nuxt.renderRoute(request.originalUrl, { request })
response.send(result.html)
})
3) /firebase.json
"hosting": {
[中略]
"rewrites": [
{
"source": "**",
"function": "nuxtServer"
}
]
}
}
これで、hostingから、functionsが呼ばれます。
(4)ビルド&デプロイ
/publicの中にあるファイル(index.html、404.html)を削除しておく。
ビルド
npm run build
生成された/functions/.nuxt/dist/clientの中身を、
/public/assets/フォルダに移動
firebase deploy
で、nuxtデフォルトページが公開されます。
ソースを見ると、確かにSSRされているのが確認できると思います。
以上、expressを使わずに、nuxt(ssr)をfirebaseで公開するでした。
もしなにか、ご意見あればコメントくださいませ。
では。