Я использовал универсальный на Angular 8, и все работало отлично, но у меня есть некоторые проблемы с новой версией
Кажется, что больше невозможно использовать ngExpressEngine без компиляции server.ts с angular приложение. Вы могли бы полностью сделать это раньше.
У меня есть огромная кодовая база, написанная на js для моего express сервера, и я не могу скомпилировать его с моим angular приложением, как это установлено с помощью схем. Из базовой установки c вы просто скомпилируете все вместе, а затем node ../dist/myapp/server/main.js
, который запускает ваш "универсальный" сервер.
Так что я мог бы sh, что я мог сделать, - это построить свою серверную сторону angular приложение без server.ts, а затем использовать сборку, когда мне это нужно, с помощью 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'
на исходном сервере. Вы импортируете AppServerModule напрямую из './src/main.server'
Я пытался используйте renderModule
и renderModuleFactory
из @angular/platform-server
, но я тоже не смог заставить его работать.