- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
更新:我创建了一个新项目,其中包含每个 Angular 更新,现在在 8.2.0 上似乎可以正常工作。只需按照下面的说明进行操作,但目前 webpack 中存在一个错误。因此,在构建“npm run build:ssr”之后,在 functions/dist 中打开 server.js 并像这样编辑第 3 行和第 7 行:
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("./server/main"));
else if(typeof define === 'function' && define.amd)
define(["require(\"./server/main\")"], factory);
else if(typeof exports === 'object')
exports["app"] = factory(require("./server/main"));
else
root["app"] = factory(root["require(\"./server/main\")"]);
(之前:“工厂(要求(“要求(\”。/服务器/主\“)”));”)
非常感谢 Michele Da Rin Fioretto 在“https://blog.daudr.me/painless-angular-ssr/#comment-4605393279”上帮助我解决这个问题。如果您遇到同样的问题,请前往那里并为此感谢他。
我有一个使用 firebase 的 Angular (8) 商店网络应用程序。但由于我没有使用 Angular-Universal,我无法在产品网站上设置标题/元标签。为了解决这个问题,我尝试添加 angular-universal 并将应用程序部署到 firebase cloud-functions,但是一旦 firebase 接管,就不再有任何路由可以匹配了。
我遵循了 angular.io 上的官方指南,然后切换到 fireship.io 的杰夫·德莱奈 (Jeff Delanay) 的教程 link to the tutorial并阅读有关此主题的一些媒体文章 like this one .我创建了(几个)新应用程序并反复尝试。只要 ssr-express 服务器处理请求,一切正常(除了新的 angular 8 延迟加载箭头功能)。 “npm run build:ssr”后跟“npm run serve:ssr”效果很好,但是一旦代码为 firebase 云功能准备好并且“firebase serve”接管,“localhost:5000”就可以工作,但打开任何链接直接地,就像“/about”示例一样,控制台输出表明没有匹配的路由。由于我尝试了官方文档和一些媒体文章,这一定是一个非常普遍的问题,但我在这里找不到关于这个主题的任何问题。
由于我看不出这将如何在 stackblitz 或其他任何地方进行审查,我将尝试(简要地)描述我所做的并在需要时显示相应的代码。
tl;dr:(已过时) Firebase Server Github Repo
(基本上打开 firebase 服务器,单击按钮并按 f5)
必要的预建:
ng new cloudfunctionsangularuniversal && cd cloudfunctionsangularuniversal
ng add @angular/fire
ng add @nguniversal/express-engine --clientProject cloudfunctionsangularuniversal
ng g c landing
ng g c ssrtesting
/src/app/app-routing.module.ts: 更新路由
//..
const routes: Routes = [
{ path: '', component: LandingComponent },
{ path: 'ssrtesting', component: SsrtestingComponent }
];
因为我想在我的项目中使用 firebase,所以我需要 XMLHttpRequest 变量
npm install ws xhr2 bufferutil utf-8-validate -D
/server.ts:用刚刚安装的包更新服务器
(global as any).WebSocket = require('ws');
(global as any).XMLHttpRequest = require('xhr2');
// ...
此时“npm run build:ssr”后跟“npm run serve:ssr”会启动一个快速服务器,它会正确处理所有传入的请求。
但要将应用程序与 Firebase 一起使用,需要进行一些更改。
初始化 firebase(选择功能和托管)
firebase init
/firebase.json:将所有流量重写为一个函数。
//...
"hosting": {
"public": "dist/browser",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"function": "ssr"
}
]
},
//...
/server.ts:导出app const,然后移除监听的调用。
export const app = express();
// ...
// app.listen(PORT, () => {
// console.log(`Node Express server listening on http://localhost:${PORT}`);
// });
/webpack.server.config.js:让你的应用成为一个库
// ...
output: {
// Puts the output at the root of the dist folder
path: path.join(__dirname, 'dist'),
library: 'app',
libraryTarget: 'umd',
filename: '[name].js',
},
// ...
/movedist.js:创建一个帮助程序,将构建应用程序从“dist”文件夹复制到“functions/dist”
const fs = require('fs-extra');
(async() => {
const src = './dist';
const copy = './functions/dist';
await fs.remove(copy);
await fs.copy(src, copy);
})();
安装所需的包
npm i --save fs-extra
/package.json:更新你的构建命令
//...
"build:ssr": "npm run build:client-and-server-bundles && npm run compile:server && node movedist && cd functions && npm run build"
//...
最后,创建使用的应用程序/functions/src/index.ts
import * as functions from 'firebase-functions';
const universal = require(`${process.cwd()}/dist/server`).app;
export const ssr = functions.https.onRequest(universal);
现在运行
npm run build:ssr
一切都应该准备好了,所以用
测试一下firebase serve
打开“localhost:5000”时一切正常。但是在隐身窗口中打开它并打开“localhost:5000/ssrtesting”,控制台会给你
"ERROR { Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'cloudfunctionsangularuniversal/us-central1/ssr/ssrtesting'"
在成功呈现页面之前。这不会发生在 firebase 服务器上。在网上它会触发 404。
如有任何帮助,我们将不胜感激。
最佳答案
尝试在 webpack.server.config.js
中的 externals
中添加 /^firebase/
关于Angular (8) Universal with firebase cloud functions - 无法匹配任何路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56878285/
main.cpp #include "Primes.h" #include int main(){ std::string choose; int num1, num2; w
似乎函数 qwertyInches() 应该可以工作但是当我在 main() 中调用它时它给了我 [Error] called object 'qwertyInches' is not a funct
我无法理解 C++ 语法的工作原理。 #include using namespace std; class Accumulator{ private: int value; public:
在 类中声明 函数成员时,我们可以同时执行这两种操作; Function first; Function() second; 它们之间有什么区别? 最佳答案 Function 代表任意函数: void
“colonna”怎么可能是一个简单的字符串: $('td.' + colonna).css('background-color','#ffddaa'); 可以正确突出显示有趣单元格的背景,并且: $
我正在尝试将网页中的动态参数中继到函数中,然后函数将它们传递给函数内部的调用。比如下面这个简化的代码片段,现在这样,直接传入参数是没有问题的。但是,如何在不为每个可能的 colorbox 参数设置 s
C++ 中是否有一种模式允许您返回一个函数,它返回一个函数本身。例如 std::function func = ...; do { func = func(); } while (func);
我正在将 Windows 程序集移植到 Linux。我有一些代码要移植。我实际上是 linux 中 C 的新手。我知道 C 基础知识是一样的! typedef struct sReader {
我一直在寻找一个很好的解释,所以我很清楚。示例: this.onDeleteHandler(index)}/> 对比 对比 this.nameChangedhandler(event, perso
function(){}.__proto__ === Function.prototype 和 Function.prototype === function(){}.__proto__ 得到不同的结
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function 据说 Propert
VBA 中的函数没有特殊类型。我很难理解如何在 Excel VBA 中将函数作为参数添加到函数中。 我想要完成的是这样的事情: function f(g as function, x as strin
所以我正在尝试制作一个包(我没有在下面包含我的 roxygen2 header ): 我有这个功能: date_from_text % dplyr::mutate(!!name := lubr
尝试从 std::function 派生一个类,对于初学者来说,继承构造函数。这是我的猜测: #include #include using namespace std; template cla
我正在尝试编写一个返回另一个函数的函数。我的目标是编写一个函数,它接受一个对象并返回另一个函数“search”。当我使用键调用搜索函数时,我想从第一个函数中给定的对象返回该键的值。 propertyO
我非常清楚函数式编程技术和命令式编程技术之间的区别。但是现在有一种普遍的趋势是谈论“函数式语言”,这确实让我感到困惑。 当然,像 Haskell 这样的一些语言比 C 等其他语言更欢迎函数式编程。但即
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 8 年前。 Improv
我在stackoverflow上查过很多类似的问题,比如call.call 1 , call.call 2 ,但我是新人,无法发表任何评论。我希望我能找到关于 JavaScript 解释器如何执行这些
向 Twilio 发送 SMS 时,Twilio 会向指定的 URL 发送多个请求,以通过 Webhook 提供该 SMS 传送的状态。我想让这个回调异步,所以我开发了一个 Cloud Functio
作为 IaC 的一部分,A 功能应用 ,让我们将其命名为 FuncAppX 是使用 Terraform 部署的,它有一个内置函数。 我需要使用 Terraform 在函数应用程序中访问相同函数的 Ur
我是一名优秀的程序员,十分优秀!