如何在5分钟内将Angular教程应用程序部署到Firebase上

只要拥有Node.js和Angular CLI环境,就可以轻松地在本地运行自身 Angular 教程应用程序来理解 Angular 的基础。通过将其托管在 Firebase 上,可以感受到简单地使用 Firebase 开始使用的感觉。

重点是使用Angular命令来解决应用程序项目的依赖关系和构建,并使用Firebase命令提供将其部署到Firebase的信息。

题目要求只有一个选项,所以我提供如下翻译:

起点条件

    Firebaseのアカウントが作成済みであること

环境准备必不可少。

执行命令的客户端终端可以是Mac、Win、Linux都没问题,但这次我们将在Mac环境下执行。

安裝 Node.js

使用Angular开发的应用程序需要安装Node.js。请从https://nodejs.org/en/ 下载和安装Node.js。
截至2019年05月26日,最新的LTS版本即可,有关官方推荐版本,请查看以下内容。

Angular需要Node.js 8.x或10.x版本。

请提供一个选项,以中文对以下内容进行改写: https://angular.jp/guide/quickstart#prerequisites

安装Angular CLI

使用npm包管理器(附带安装Node.js)将Angular CLI全局安装。

sudo npm install -g @angular/cli --unsafe-perm

在我的 Mac 环境中,如果没有安装 sudo 和 –unsafe-perm,就会出现以下错误。

npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/@angular/cli

版本确认命令

ng --version
     _                      _                 ____ _     ___
    / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
   / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
  / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
 /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
                |___/


Angular CLI: 7.3.9
Node: 10.15.3
OS: darwin x64
Angular: 
... 
~~

安装Firebase工具

同样地,您可以使用npm命令将其安装至全局环境。

sudo npm isntall -g firebase-tools --unsafe-perm

版本确认指令

firebase --version
6.10.0

在本地运行Angular教程应用程序

只要在Firebase上运行就可以,本来是不需要的。
然而,在实际开发中,通常会在本地进行确认,然后再部署到Firebase上,所以也会在本地运行一次。

下载已完成的教程应用程序

由于这是教程,你需要一步一步地完成一个场景。不过这次我们将直接运行最终版本。
请从 https://angular.jp/generated/zips/toh-pt6/toh-pt6.zip 下载并解压。

切换到应用程序项目的目录中。

cd /Users/hogehoge/Downloads/toh-pt6

安装依赖模块

将依赖模块安装到本地环境。由于是本地环境(位于项目目录下),因此不需要使用sudo命令。

npm install

在这个例子中,angular模块及其所依赖的构建工具将被安装在 /Users/hogehoge/Downloads/toh-pt6/node_modules 目录下。

在本地环境下启动

在本地环境中启动应用程序。

ng serve --open

因为有”open”选项,所以我认为在应用程序启动后会自动在浏览器中访问 http://localhost:4200/。

将Angular教程应用程序部署到Firebase。

Angular应用程序的生产构建

ng build --prod

由于在我的环境中出现以下错误,所以我将hero-search.component.en.ts删除或者将其重命名为hero-search.component.en.ts.back来暂时解决问题,并将其移出构建目标以避免影响。

Date: 2019-05-26T14:43:03.047Z
Hash: 47992a2e3f00b82be305
Time: 9127ms
chunk {0} runtime.ec2944dd8b20ec099bf3.js (runtime) 1.41 kB [entry] [rendered]
chunk {1} main.9868d9b237c3a48c54da.js (main) 128 bytes [initial] [rendered]
chunk {2} polyfills.85f47f0bf59079cbc23a.js (polyfills) 130 bytes [initial] [rendered]
chunk {3} styles.167b12e8ea2d1f694d59.css (styles) 765 bytes [initial] [rendered]

ERROR in : Cannot determine the module for class HeroSearchComponent in /Users/hogehoge/Downloads/toh-pt6/src/app/hero-search/hero-search.component.en.ts! Add HeroSearchComponent to the NgModule to fix it.

通过以上的构建命令,将生成dist目录,并且可以确认包含了具有低可读性的js文件的部署目标文件。

$ ls ./dist
3rdpartylicenses.txt            main.42fecdd23b351048f441.js        styles.167b12e8ea2d1f694d59.css
favicon.ico             polyfills.ef261426ad5a9ac404e3.js
index.html              runtime.ec2944dd8b20ec099bf3.js

登录Firebase

我将使用CLI登录Firebase。

firebase login

在确认收集以下使用情况数据后,将会跳转至使用浏览器登录Google账户的认证页面。

[? Allow Firebase to collect anonymous CLI usage and error reporting information? No
image.png

将项目进行Firebase化。

将本地应用项目初始化为Firebase应用。

firebase init

显示以下结果,并选择应用程序的特点。
这一次不使用实时数据库,只需通过按下空格键选择最简单的Hosting,然后按下回车键进行确认。


     ######## #### ########  ######## ########     ###     ######  ########
     ##        ##  ##     ## ##       ##     ##  ##   ##  ##       ##
     ######    ##  ########  ######   ########  #########  ######  ######
     ##        ##  ##    ##  ##       ##     ## ##     ##       ## ##
     ##       #### ##     ## ######## ########  ##     ##  ######  ########

You're about to initialize a Firebase project in this directory:

  /Users/hogehoge/Downloads/toh-pt6

? Which Firebase CLI features do you want to set up for this folder? Press Space to select features, then Enter to confirm your choices. 
 ◯ Database: Deploy Firebase Realtime Database Rules
 ◯ Firestore: Deploy rules and create indexes for Firestore
 ◯ Functions: Configure and deploy Cloud Functions
❯◉ Hosting: Configure and deploy Firebase Hosting sites
 ◯ Storage: Deploy Cloud Storage security rules

选择Firebase的公开项目。这次我们要新建一个项目。

=== Project Setup

First, let's associate this project directory with a Firebase project.
You can create multiple project aliases by running firebase use --add, 
but for now we'll just set up a default project.

? Select a default Firebase project for this directory: 
  [don't setup a default project] 
  my-project-xxxxx (my-project) 
❯ [create a new project]  

请输入要公开的本地应用项目的目录。
请指定先前构建生成的项目下的dist目录。

=== Hosting Setup

Your public directory is the folder (relative to your project directory) that
will contain Hosting assets to be uploaded with firebase deploy. If you
have a build process for your assets, use your build's output directory.

? What do you want to use as your public directory? (public) dist

因为这是SPA,所以我会选择y。

? Configure as a single-page app (rewrite all urls to /index.html)? (y/N) y

由于index.html是使用Angular的构建命令生成的,所以不会被覆盖。(实际上与将其置为”否”可能是相同的。)

? File dist/index.html already exists. Overwrite? (y/N) N

通过这个操作,会生成一个名为firebase.json的文件,里面包含了以下所需的部署信息。

{
  "hosting": {
    "public": "dist",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

将应用程序部署到Firebase

将dist目录部署到Firebase。

firebase deploy
=== Deploying to 'my-project-xxxxx'...

i  deploying hosting
i  hosting[my-project-xxxxx]: beginning deploy...
i  hosting[my-project-xxxxx]: found 7 files in dist
✔  hosting[my-project-xxxxx]: file upload complete
i  hosting[my-project-xxxxx]: finalizing version...
✔  hosting[my-project-xxxxx]: version finalized
i  hosting[my-project-xxxxx]: releasing new version...
✔  hosting[my-project-xxxxx]: release complete

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/my-project-xxxxx/overview
Hosting URL: https://my-project-xxxxx.firebaseapp.com
image.png
image.png

请参考以下网址。

如何将Angular应用部署到Firebase Hosting
在几分钟内将Angular应用部署到Firebase

为了在Angular中更容易地进行开发,我们将模块分离为ts(TypeScript)文件、css文件和html文件,以便更易于理解。由于使用了TypeScript,我们可以进行严格的类型检查并利用类的概念来进行安全编程。然而,在实际的部署环境中,它会以转换后的低可读性的js文件、css文件和html文件来运行。在理解如何进行这种转换时,我们知道需要使用Node.js模块。(如果我理解错了,请指正。)
广告
将在 10 秒后关闭
bannerAds