【发布时间】:2020-05-03 15:08:40
【问题描述】:
我在 Angular 8 上使用 Universal,一切正常,但我在使用新版本时遇到了一些问题
如果不使用 Angular 应用程序编译 server.ts,似乎不再可以使用 ngExpressEngine。你以前完全可以做到的。
我有一个用 js 为我的 express 服务器编写的庞大代码库,我无法使用我的 angular 应用程序编译它,就像用原理图设置的那样。从基本设置开始,您只需将所有内容编译在一起,然后 node ../dist/myapp/server/main.js 将启动您的“通用”服务器。
所以我希望我能做的是在没有 server.ts 的情况下构建我的服务器端 Angular 应用程序,然后在我需要时从我的主应用程序中通过 ngExpressEngine 使用该构建
================================================ ============================
编辑大卫的答案
require("zone.js/dist/zone-node");
const { ngExpressEngine } = require("@nguniversal/express-engine");
const express = require("express");
const app = express();
const { join } = require("path");
const { AppServerModule } = require("./dist/ttmodel/server/main");
const { existsSync } = require("fs");
const { APP_BASE_HREF } = require("@angular/common");
app.use(express.static(join(__dirname, "dist")));
const distFolder = join(process.cwd(), "dist/ttmodel/browser");
const indexHtml = existsSync(join(distFolder, "index.original.html"))
? "index.original.html"
: "index";
app.engine(
"html",
ngExpressEngine({
bootstrap: AppServerModule,
})
);
app.set("view engine", "html");
app.set("views", distFolder);
app.get(
"*.*",
express.static(distFolder, {
maxAge: "1y",
})
);
app.get("*", (req, res) => {
res.render(indexHtml, {
req,
providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }],
});
});
app.listen(3000);
你的意思是这样的?我试过了,结果还是不行
Error: ENOENT: no such file or directory, open 'app.component.html'
在原始 server.ts 上,您直接从 './src/main.server' 导入 AppServerModule
我尝试使用@angular/platform-server 中的renderModule 和renderModuleFactory,但我也无法使用。
【问题讨论】:
-
你到底想达到什么目的?
-
感谢您的回答,我试图改进我的问题