3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Expressなしで、最短でNuxt(SSR)をfirebaseで公開してみる。

Posted at

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で公開するでした。

もしなにか、ご意見あればコメントくださいませ。
では。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?