ファイアウォールにNuxtを配備する
導入
私はすでにNuxtとSSRを使用して作業ウェブサイトを持っているので、なぜ私はすべてのFirebaseに移動しますか?
SSR stands for server-side rendering, you can find more information here
多くの理由がある!
いくつかのリストを表示します.
価格
現在の解決策:私は個人サーバーのために毎月支払う必要があります
私のニーズのために、それは無料です.
構成
現在の解決策:私はすべてを設定する必要があります.Dockerコンテナ、https、nginxリバースプロキシ、...
Firebase:あなたが必要とするすべては、すでにされます.カスタムドメインのログを作成します.
更新
現在の解決:私のウェブサイトの変化?ステップはこちら
チェッカーハブの
私は、私がもう少しものを自動化することができたということを知っています、しかし、まだ...
ステップ:Firebase
あなたは夢中ですか?明らかに、あなたです.あなたがそれを走らせるのを手伝わせてください.
Firebaseプロジェクトの設定
Firebaseアカウントの作成
Firebaseを使いたいですね.さて、あなたは最初にcreate your accountに必要です.
できた?新しいプロジェクトを作成することができます.
Firebaseプロジェクトを作成する
Firebase consoleに向かいましょう.
プロジェクト名を設定します.
をクリックします.
すぐにGoogle Analyticsをチェックして、FireBaseを加えてください.
プロジェクトの初期化を待ち、続行をクリックします.
ファイアウォールのインストール
今NPMの助けを借りて、我々はコンピュータ上でFireBaseツールをインストールします.
単にあなたの大好きな端末でこのコマンドを入力してください
npm i -g firebase-tools
その後、このコマンドでログインできますfirebase login
ブラウザのウィンドウがポップアップ表示され、あなたのGoogleアカウントでログインすることができます.さて、最初のFirebaseセットアップが行われます.
プロジェクトにFireBaseを追加する前に、アプリケーションプロジェクトの構造を更新する必要があります.
プロジェクト構造
I'm supposing you already have a nuxt project.
If not, head over to the Nuxt website to create a new app with express for the server side.
当社のプロジェクトは3つのディレクトリに分解されます
src :開発ファイルが
機能:これは、我々のSSR機能が
パブリックディレクトリ:このディレクトリはFirebaseホスティング
私たちは、機能と公共のディレクトリの世話をしません.これは自動的に生成されます.
したがって、srcディレクトリを作成して、それにすべてのnuxtディレクトリを動かしてください.
ディレクトリだけが設定ファイルをrootに残します
あなたは以下の構造のようなものを持つべきです
アプリは現在壊れている!Nuxtの設定を更新して修正しましょう.
アップデートNuxt設定
Nuxtで.設定.jsで次の行をモジュールに追加します.輸出
module.exports = {
[...]
srcDir: 'src',
buildDir: 'functions/.nuxt',
[...]
}
そして、buildオブジェクトで、ExtractCSSをtrueに設定しますmodule.exports = {
[...]
build: {
extractCSS: true,
[...]
}
[...]
}
NPMスクリプトがエントリーファイルサーバー/インデックスを見つけることができないので、それはまだ壊れています.js荷物を更新しましょう.JSON
devとstartスクリプトを置き換えます.
I just prefixed the path with "src"
"dev": "cross-env NODE_ENV=development nodemon src/server/index.js --watch server",
"start": "cross-env NODE_ENV=production node src/server/index.js",
これで、Win devやNPMランdevを入力してアプリケーションを起動できるようになりましたNotice that the functions directory has been created with the nuxt files in it.
プロジェクトにfirebaseを追加する
gitやnpmのように、FireBaseのCLIはすぐに必要なすべてを得るためにそのinitコマンドを持っています.
コマンドを起動する
firebase init
CLIはあなたにいくつかの質問をします.? Are you ready to proceed?
> Yes
? Which Firebase CLI features do you want to set up for this folder? Press Space to select features, then Enter to confirm your choices.
> Functions: Configure and deploy Cloud Functions,
> Hosting: Configure and deploy Firebase Hosting sites
? Please select an option:
> Use an existing project
(Select the project we created earlier)
? 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)
> y
? Do you want to install dependencies with npm now? (Y/n)
> Y
? What do you want to use as your public directory? (public)
> public
? Configure as a single-page app (rewrite all urls to /index.html)? (y/N)
> N
A wild public directory appeared! Our project structure is now complete.
我々は現在、我々の機能を編集することができます.
SSR関数の実装
関数/indexを開きます.JSファイルは、すべて削除し、以下のコードを貼り付ける
const functions = require('firebase-functions')
const { Nuxt } = require('nuxt')
const express = require('express')
const app = express()
const config = {
dev: false
}
const nuxt = new Nuxt(config)
let isReady = false
const readyPromise = nuxt
.ready()
.then(() => {
isReady = true
})
.catch(() => {
process.exit(1)
})
async function handleRequest(req, res) {
if (!isReady) {
await readyPromise
}
res.set('Cache-Control', 'public, max-age=1, s-maxage=1')
await nuxt.render(req, res)
}
app.get('*', handleRequest)
app.use(handleRequest)
exports.nuxtssr = functions.https.onRequest(app)
それを合計するために、各々のreqestに、機能はレスポンスおよびリクエストオブジェクトをNUXTに渡します.レンダリング(REQ、RES)は、アプリケーションのレンダリングを処理する関数です.関数パッケージの更新。JSON
関数は、Nuxtアプリと同じライブラリが必要になります.パッケージをコピーします.JSON依存関数/パッケージ.依存性
この記事を書くとき、Firebaseはノードバージョン10をサポートします.関数/パッケージで.JSONは8から10までのノードエンジンのバージョンを更新できます.
以下は関数/パッケージの例です.ブランクNuxtプロジェクトのJSON
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"lint": "eslint .",
"serve": "firebase serve --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "10"
},
"dependencies": {
"firebase-admin": "^8.0.0",
"firebase-functions": "^3.1.0",
"cross-env": "^5.2.0",
"nuxt": "^2.3.4",
"express": "^4.16.4",
"vuetify": "^1.3.14",
"vuetify-loader": "^1.0.8",
"@nuxtjs/pwa": "^2.6.0"
},
"devDependencies": {
"eslint": "^5.12.0",
"eslint-plugin-promise": "^4.0.1",
"firebase-functions-test": "^0.1.6"
},
"private": true
}
firebaseの更新JSON
ファイル全体を置換する
{
"hosting": {
"public": "public",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "**",
"function": "nuxtssr"
}
]
}
}
それは我々が作った機能にすべての要求をリダイレクトするでしょうUsing a node version above 10 can cause some issues...
You can use nvm or directly install NodeJs 10 on your computer.
自動化する
静的ファイル
静的ファイルがパブリックディレクトリに保持されることを以前に知りました.しかし、Nuxt静的ファイルは何ですか?
Nuxtアプリケーション自体、Nuxtビルドコマンドの結果があります.
と静的ファイル(. jpg、. ico、. png、...)src/staticディレクトリに保存されます.
それで、パブリックディレクトリで両方を動かす必要があります.
一歩一歩
ここでは、スクリプトと自動化するつもりです
The public folder should look something like this
これらのスクリプトは私たちのすべてを行います.彼らはとても親切だ.
これらをメインパッケージに追加します.JSONファイル.
Windowsバージョン
scripts: {
"build": "nuxt build",
"build:firebase": "yarn clean && yarn build && yarn copy && cd \"functions\" && yarn",
"clean": "yarn clean:public && yarn clean:functions && yarn clean:static",
"clean:functions": "rimraf \"functions/node_modules\" && rimraf \"functions/.nuxt\"",
"clean:public": "rimraf \"public/**/*.*!(md)\" && rimraf \"public/_nuxt\"",
"clean:static": "rimraf \"src/static/sw.js\"",
"copy": "yarn copy:nuxt && yarn copy:static",
"copy:nuxt": "xcopy \"functions\\.nuxt\\dist\\*\" \"public\\_nuxt\\\" /E /Y",
"copy:static": "xcopy \"src\\static\\*\" \"public\\\" /E /Y",
"start:firebase": "firebase serve --only functions,hosting",
"deploy": "firebase deploy --only functions,hosting"
}
MacOSバージョン
Thanks to for his MacOs scripts version
"scripts": {
// ...
"build:firebase": "yarn clean && yarn build && yarn copy && cd functions && yarn",
"clean": "yarn clean:public && yarn clean:functions && yarn clean:static",
"clean:functions": "rimraf \"functions/node_modules\" && rimraf \"functions/.nuxt\"",
"clean:public": "rimraf \"public/**/*.*!(md)\" && rimraf \"public/_nuxt\"",
"clean:static": "rimraf \"src/static/sw.js\"",
"copy": "yarn copy:nuxt && yarn copy:static",
"copy:nuxt": "mkdir public/_nuxt && cp -r functions/.nuxt/dist/* public/_nuxt",
"copy:static": "cp -r src/static/* public",
"start:firebase": "firebase serve --only functions,hosting",
"deploy": "firebase deploy --only functions,hosting",
// ...
}
Still having issues? comment might help you
グランドフィナーレ
これらのコマンドを起動してアプリケーションを起動できます
yarn build:firebase
yarn start:firebase
展開します.yarn build:firebase
yarn deploy
To、開発のために、あなたはまだ使用できますyarn dev
結論
これで、サーバーにNuxtアプリケーションをfirebaseにレンダリングしました.簡単な?
この記事のために、私は空白Nuxtアプリで例をしました.最終的なプロジェクトはnuxt-on-firebase example repositoryです.
あなたはエラーを見つけましたか?恥を知れ!プルリクエストを行うことによって修正することができます
Reference
この問題について(ファイアウォールにNuxtを配備する), 我々は、より多くの情報をここで見つけました https://dev.to/kiritchoukc/deploy-nuxt-on-firebase-4ad8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol