我试图在我的angular8项目上运行SSR,但是当我运行server.js时会发生此错误
home/daba/client/dist/server/main.js:288235
})(window, document, 'Hammer');
^
ReferenceError: window is not defined
at Object.yLV6 (/home/daba/client/dist/server/main.js:288235:4)
at webpack_require (/home/daba/client/dist/server/main.js:20:30)
at Object.ZAI4 (/home/daba/client/dist/server/main.js:171354:1)
at webpack_require (/home/daba/client/dist/server/main.js:20:30)
at Object.V7fC (/home/daba/client/dist/server/main.js:161821:10)
at webpack_require (/home/daba/client/dist/server/main.js:20:30)
at Object.K011 (/home/daba/client/dist/server/main.js:125145:37)
at webpack_require (/home/daba/client/dist/server/main.js:20:30)
at Object.0 (/home/daba/client/dist/server/main.js:1251:18)
at webpack_require (/home/daba/
client/dist/server/main.js:20:30)
`
我尝试了很多事情,但还是没做
答案 0 :(得分:2)
服务器端应用程序不能引用仅浏览器的全局对象,例如窗口,文档,导航器或位置。您必须检查代码是在服务器端还是在客户端运行:
constructor(
@Inject(PLATFORM_ID) private platformId: Object
)
...
myFunction() {
if (isPlatformBrowser(this.platformId)) {
// do something with window here
}
}
答案 1 :(得分:0)
您是否曾尝试在const app = express();
之前将此代码添加到server.ts中?避免第三方库不允许在服务器端使用它们可能会有所帮助。
import * as fs from 'fs';
import * as domino from 'domino';
const template = fs.readFileSync('browser/index.html').toString();
const win = domino.createWindow(template);
global['window'] = win;
global['document'] = win.document;
global['navigator'] = win.navigator;
global['Event'] = null;