Quasar CLI with Webpack - @quasar/app-webpack

部署 SPA

有许多服务可以轻松部署应用程序。将其全部列出是不可能的,因此我们将专注于一般部署过程和一些普通服务的细节。

如果缺少您最喜欢的部署工具,请在 GitHub 上创建一个拉取请求,将其添加到列表中。

通用部署

部署 Quasar SPA 的第一步总是打包一个用于生产环境的构建产物,这样可以去掉开发语句并缩小源代码。

要生成这样的构建产物,请使用 Quasar CLI 和以下命令:

$ quasar build

该命令会以 SPA 模式打包项目,构建产物默认输出在 /dist/spa 目录下。

要为生产环境下的构建产物提供服务,需要使用一个 web 服务器,以便通过 http(s):// 协议提供服务。简单地从浏览器中打开 index.html 文件是行不通的,因为它使用的是 file:// 协议。

常用的 web 服务器有 nginx, Caddy, Apache, Express 等。但是您可以选择任何您想要的 web 服务器。

该 web 服务器不需要特殊设置(除非您在 quasar.config.js 中配置了使用 “history” 模式的 Vue 路由)。主要要求是能够从一个目录中提供静态文件,因此请查阅 web 服务器的文档,了解如何设置静态文件服务。

拿 nginx 举例:

server {
    listen 80 http2;
    server_name quasar.myapp.com;

    root /home/user/quasar.myapp.com/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/quasar.myapp.com-error.log error;

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

重要的部署机器配置

有一点很重要,不要允许浏览器缓存 index.html 文件,应用的更新可能因为浏览器从缓存中加载 index.html 而被忽略。

所以在部署的主机上,必须为 index.html 文件添加 "Cache-Control": "no-cache" 响应头。

例如,使用 Google Firebase 部署时,需要在 firebase.json 中添加如下配置:

{
  "hosting": {
    "headers": [
      {
        "source": "/**",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "no-cache, no-store, must-revalidate"
          }
        ]
      },
      {
        "source": "**/*.@(jpg|jpeg|gif|png|svg|webp|js|css|eot|otf|ttf|ttc|woff|woff2|font.css)",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "max-age=604800"
          }
        ]
      }
    ]
  }
}

使用 Vercel 部署

部署 Quasar 单页应用到 Vercel 非常简单。只需要安装 vercel-cli 然后登陆:

$ vercel login

然后继续使用通用部署部分中描述的步骤来打包您的 Quasar 应用程序。

打包成功后,进入部署根目录中(例如:/dist/spa),然后运行:

# from /dist/spa (or your distDir)
$ vercel

Vercel CLI 现在应该显示相关部署的信息,如 URL。就这样,已经成功了。

Vercel 配置

在部署时给项目添加一些配置。

  • 重要:Vercel 希望构建产物位于 /public 目录,但是 Quasar 的构建产物默认位于 /dist/spa。所以您可以在您的 Vercel 项目中将 Output Directory 设置为 dist/spa,访问 Vercel 的网页控制台,转到您的项目 > settings > Build & Development Settings。

  • 由于 Vercel 还期望一个打包脚本,可以在 package.json 中提供以下脚本:

  {
    ..
    "scripts": {
      ...
      "build": "quasar build",
      "deploy": "vercel"
    }
  }
  • 为了在部署的应用程序中支持 SPA 路由,请考虑在根文件夹中添加 vercel.json 文件:
{
  "routes": [
    { "handle": "filesystem" },
    { "src": "/.*", "dest": "/index.html" }
  ]
}

使用 Heroku 部署

不幸的是,Heroku 不支持开箱即用的静态站点。但是不用担心,只需要在项目中添加一个 HTTP 服务器,这样 Heroku 就可以为我们的 Quasar 应用程序提供服务了。

在本例中,我们将使用 Express 创建 Heroku 可以使用的最小服务器

首先,为项目安装所需的依赖项:project:

$ yarn add express serve-static connect-history-api-fallback

然后添加服务器,在项目的根目录中创建一个名为 server.js 的文件。

const
  express = require('express'),
  serveStatic = require('serve-static'),
  history = require('connect-history-api-fallback'),
  port = process.env.PORT || 5000

const app = express()

app.use(history())
app.use(serveStatic(__dirname + '/dist/spa'))
app.listen(port)

Heroku 期望有一组 npm 脚本可用,因此需要修改 package.json 并在 script 部分下面添加以下内容:

"build": "quasar build",
"start": "node server.js",
"heroku-postbuild": "yarn && yarn build"

现在是时候在 Heroku 上通过运行以下命令创建一个应用程序了:

$ heroku create

并使用以下方法部署到 Heroku:

$ git init
$ heroku git:remote -a <heroku app name>

$ git add .
$ git commit -am "make it better"
$ git push heroku master

对于现有的 Git 仓库,只需添加 heroku 远程:

$ heroku git:remote -a <heroku app name>

使用 Surge 部署

Surge 是托管和部署静态站点的流行工具。

如果要使用 Surge 部署应用程序,首先需要安装 Surge CLI 工具:

$ npm install -g surge

接下来,使用 Quasar CLI 构建应用程序:

$ quasar build

通过调用以下命令使用 Surge 部署应用程序:

$ surge dist/spa

现在,您的应用程序应成功地使用 Surge 部署。您应该能够使本指南适应任何其他静态站点部署工具。

使用 GitHub Pages 部署

要将 Quasar 应用程序部署到 GitHub Pages,第一步是在 GitHub 上创建一个名为 <username>.github.io 的特殊仓库,并将此存储库克隆到本地。

接下来,像 通用部署 中所描述的那样打包 Quasar 应用,构建产物将会在 /dist/spa 中。将此文件夹的内容复制到刚才克隆的仓库中。

最后一步是在该仓库中添加提交并推送到 GitHub。不久之后,应该就可以访问 https://<username>.github.io/ 上的 Quasar 应用程序。

给 GitHub pages 添加一个自定义域名

有关如何设置自定义域的详细说明,请参阅 GitHub 页面指南

通过 push-dir 自动部署到 GitHub pages

手动将所有文件复制到 GitHub Pages 仓库可能是一项繁琐的任务。使用 push-dir 包可以自动执行此步骤。

第一步,安装:

$ yarn add --dev push-dir

然后在 package.json 添加一个 deploy 脚本:

"scripts": {
  "deploy": "push-dir --dir=dist/spa --remote=gh-pages --branch=master"
}

添加您的 GitHub Pages 仓库作为一个远程仓库,命名为 gh-pages

$ git remote add gh-pages git@github.com:<username>/<username>.github.io.git

现在,您可以使用以下方法构建和部署应用程序:

$ quasar build
$ yarn deploy

它将把构建目录的内容推送到 GitHub Pages 仓库的主分支。