- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近将Angular 8应用程序升级为通用应用程序(SSR)。在将它作为SSR应用程序之前,我已经将其部署到Firebase,但是后来我发现,使用常规Firebase托管无法在Firebase上部署SSR应用程序。我做了一些研究,发现我必须使用Firebase Cloud Functions。
我使用以下方法创建了一个SSR应用程序:
ng add @nguniversal/express-engine --clientProject PROJECT_NAME
PROJECT_NAME
可以在
angular.json
部分下面的
"projects"
文件中找到。
最佳答案
重要说明:此解决方案来自于Udemy的Angular课程(here)的“问答”部分。我尝试了一下,并进行了一些修改使其得以工作。
因此,首先通过运行npm run build:ssr
和npm run serve:ssr
来确保SSR确实起作用。
然后安装Firebase Tools并初始化项目:
npm install -g firebase-tools
firebase login
,如果需要,提供您的Firebase凭证(电子邮件/密码)。 firebase init
y
并按Enter。 (*) Functions
(*) Hosting
TypeScript
,然后按Enter。 y
并按Enter。 y
并按Enter。 dist/browser
并按Enter(请注意:这与部署不带Universal的应用程序不同!)。 y
并按Enter。 n
(重要!),然后按Enter。 "destination": "/index.html"
替换为"function": "ssr"
ssr
指向此export const ssr = functions.https.onRequest(universal);
变量,您将在下面找到它)。 export
添加到app
初始化中:export const app = express();
代替const app = express();
app.listen(...)
)或将其替换为: // If we're not in the Cloud Functions environment, spin up a Node server
if (!process.env.FUNCTION_NAME) {
// Start up the Node server
app.listen(PORT, () => {
console.log(`Node Express server listening on http://localhost:${PORT}`);
});
}
npm run serve:ssr
时需要它们,以便能够在
localhost
上托管您的应用程序。
output
,如下所示: output: {
// Puts the output at the root of the dist folder
path: path.join(__dirname, 'dist'),
// Export a UMD of the webpacked server.ts & dependencies for rendering in Cloud Functions
library: 'app',
libraryTarget: 'umd',
filename: '[name].js',
},
externals
:
externals: [
// Firebase has some troubles being webpacked when it's in the Node environment, so we will skip it.
/^firebase/
],
npm run serve:ssr
或
firebase serve
命令时。
npm run build:ssr
重建应用程序。 cd functions
npm i fs-extra
const fs = require('fs-extra');
fs.copy('../dist', './dist').then(() => {
// We should remove the original "index.html" since Firebase will use it when SSR is enabled (instead of calling SSR functions),
// and because of that, SSR won't work for the initial page.
fs.remove('../dist/browser/index.html').catch(e => console.error('REMOVE ERROR: ', e));
}).catch(err => {
console.error('COPY ERROR: ', err)
});
<app-root></app-root>
)。
index.html
文件,因此除非您首先重建应用程序(通过运行
npm run serve:ssr
->这将重新创建
npm run build:ssr
文件),否则运行
index.html
将无法工作。
"build": "node copy-angular-app && tsc",
import * as functions from 'firebase-functions';
const universal = require(`${process.cwd()}/dist/server`).app;
export const ssr = functions.https.onRequest(universal);
npm run build
将dist
文件夹复制到functions
文件夹中。 package.json
文件中创建脚本:
"build:ssr": "npm run build:client-and-server-bundles && npm run compile:server", // this one should already exist
"build:ssr-firebase": "npm run build:ssr && npm --prefix functions/ run build",
npm run build:ssr
),然后将在
函数文件夹中运行
npm run build
(这样,它将把项目的
dist
文件夹复制到您的
函数
dist
文件夹,并删除项目的
index.html
文件)。
firebase serve
在 localhost:5000 上为本地应用提供服务。 firebase deploy
来部署应用程序,并通过终端中显示的URL对其进行访问。 关于angular - 在Firebase上部署Angular 8 Universal(SSR)应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58447458/
请帮助我了解如何在 Angular Universal 中使用服务器渲染。 我做了什么。我访问了 Angular Universal 官方网站。设置 Node.js。下载推荐项目 Angular 2
我正在研究使用 explicit universes 的可能性用于在 Coq 中构建固定的 Universe 层次结构。在构建它时使用常量 (2, 3, 4) 的尝试失败了:最后,所有组合仍然类型检查
我查看了 Universal Analytics,但没有找到问题的正确答案。 如何将这一行从旧的 Analytics 更新到新的 Universal Analytics? _gaq.push(["_s
我在 IIS 中部署 angular 通用应用程序时遇到问题。在 angular 通用中,创建了两个 dist 文件夹,一个是客户端的 dist,另一个是 dist-server,当我尝试托管时,我提
我使用@ng-toolkit/universal 作为我的服务器端渲染方法。一切正常,没有我的图像。我正在动态地获取它们。因此,当用户没有头像时,会显示一个占位符图像。因此我正在使用这个函数: ver
-编译应用程序后,我多次收到此错误 enter image description here 文本错误: 错误错误 at XMLHttpRequest.send (C:\Users\seva-
我正在Win10中使用VS2015开发通用应用程序。模拟器和android模拟器运行正常。 但是,当我启动Windows Phone Mobile模拟器时,该模拟器运行并显示“操作系统正在启动”,然后
我正在实现一个路由保护(CanActivate 接口(interface)),我需要在某些条件下重定向到未找到的页面。这可以通过以下语句来实现: if (isNode){ let res : Resp
我偶然发现了一个奇怪的情况,其中有 reflect.runtime.universe._进口原因reflect.runtime.universe.RuntimeClass推断它似乎在哪里Nothing
每当我在我的应用程序中加载图像时,我的 logcat 都会给我这条消息。 04-09 19:09:59.241: W/ImageLoader(276): Try to initialize Image
我正在尝试添加包但出现错误 meteor add universe:carousel => Errors while adding packages: 选择软件包版本时: error: Confli
所以我一直在尝试将我的应用程序转换为 angular universal,并且在大多数情况下都很好。但我之前读过一些“陷阱”:https://github.com/onespeed-articles/
我有一个指令,使文本输入到谷歌的地方自动完成输入,看起来像: import { Directive, AfterViewInit , Output, EventEmitter, NgZone, Ele
大约一年前,我们升级到了通用Analytics(分析),由于升级我们的站点搜索并没有在我们的Analytics(分析)帐户中显示关键字,甚至没有跟踪其使用次数。 作为营销人员,这是一个问题,因为我想知
我正准备使用 Angular Universal 为我的 Angular 7 应用程序设置 SSR。我遵循了官方文档( https://angular.io/guide/universal )。我到了
在应用程序关闭(暂停)后,我正在将一个不大于 10KB 的数据文件写入 RoamingFolder。该应用程序在开发桌面和 Surface 2 上运行,两者都登录到同一个 Microsoft 帐户。但
This question already has answers here: Page Navigation using MVVM in Store App (5个答案) 6年前关闭。 使用MVVM
我尝试安装iOS-Universal-Framework 。尝试运行instalation shell screept从这个存储库并始终获取消息: iOS Real Static Framework
这就是我目前初始化 chromedriver 的方式 System.setProperty("webdriver.chrome.driver", "C://chromedriver.exe"); 但是
您好,我在尝试运行 perl 脚本时遇到以下错误: pc:~/Phd/lenovo/programs/vep/scripts/variant_effect_predictor$ perl varian
我是一名优秀的程序员,十分优秀!