尝试将 js 函数添加到我的 ionic 项目中,但出现 self is not defined 错误。在尝试将 self 添加为 global ["self"] = win.self ||赢;我得到一个错误
ERROR TypeError: Cannot redefine property: constructor . Use the latest version of all required dependencies in the project.
服务器.ts
import "zone.js/dist/zone-node";
import { ngExpressEngine } from "@nguniversal/express-engine";
import * as express from "express";
import { join } from "path";
import { enableProdMode } from "@angular/core";
import { AppServerModule } from "./src/main.server";
import { APP_BASE_HREF } from "@angular/common";
import { existsSync } from "fs";
enableProdMode();
export function app(): express.Express {
const server = express();
const distFolder = join(process.cwd(), "dist/app/browser");
const indexHtml = existsSync(join(distFolder, "index.original.html"))
? "index.original.html"
: "index";
const domino = require("domino");
const win = domino.createWindow(indexHtml);
// mock
global["window"] = win;
global["self"] = win.self;
global["document"] = win.document;
global["navigator"] = win.navigator;
server.engine("html", ngExpressEngine({ bootstrap: AppServerModule }));
server.set("view engine", "html");
server.set("views", distFolder);
server.get(
"*.*",
express.static(distFolder, {
maxAge: "1y",
})
);
server.get("*", (req, res) => {
res.render(indexHtml, {
req,
providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }],
});
});
return server;
}
function run(): void {
const port = process.env.PORT || 4000;
const server = app();
server.listen(port, () => {
console.log(`Node express server listening on http://localhost:${port}`);
});
}
declare const __non_webpack_require__: NodeRequire;
const mainModule = __non_webpack_require__.main;
const moduleFilename = (mainModule && mainModule.filename) || "";
if (moduleFilename === __filename || moduleFilename.includes("iisnode")) {
run();
}
export * from "./src/main.server";
最佳答案
我遇到了同样的问题。将这些行添加到我的 server.ts 文件中,并在添加 global['self'] = win; 之后发生错误。没有它,将显示 self is undefined 错误。
const domino = require('domino');
const templateA = readFileSync(join(distFolder, indexTemplate)).toString();
const win = domino.createWindow(templateA);
(win as any).Object = Object;
(win as any).Math = Math;
global['self'] = win; //TODO: Is giving ERROR TypeError: Cannot redefine property: constructor at Function.defineProperty
global['window'] = win;
global['win'] = win;
global['branch'] = null;
关于angular - ionic 与 SSR 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63260694/