javascript - Angular Universal ReferenceError - KeyboardEvent 未定义
问题描述
我在server.ts中添加了“多米诺骨牌” ,甚至将webpack.server.config.js更新为:
module: {
rules: [
{ test: /\.(ts|js)$/, loader: 'regexp-replace-loader', options: { match: { pattern: '\\[(Mouse|Keyboard)Event\\]', flags: 'g' }, replaceWith: '[]', } },
{ test: /\.ts$/, loader: 'ts-loader' },
]
}
但仍然收到相同的错误:“ReferenceError - KeyboardEvent 未定义”。
我在终端中运行这些命令
$npm 运行构建:ssr
$npm 运行服务:ssr
在package.json中定义的命令为:
"build:ssr": "npm run build:client-and-server-bundles && npm run webpack:server",
"serve:ssr": "node dist/server.js",
"build:client-and-server-bundles": "ng build --prod && ng run angular.io-example:server",
"webpack:server": "webpack --config webpack.server.config.js --progress --colors"
有谁知道如何摆脱这个错误?
解决方案
干得好
const domino = require('domino');
const fs = require('fs');
const template = fs.readFileSync(join(DIST_FOLDER , 'index.html')).toString();
const win = domino.createWindow(template);
global['window'] = win;
global['Node'] = win.Node;
global['navigator'] = win.navigator;
global['Event'] = win.Event;
global['KeyboardEvent'] = win.Event;
global['MouseEvent'] = win.Event;
global['Event']['prototype'] = win.Event.prototype;
global['document'] = win.document;
将上面的代码放入server.ts
文件中
const {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require('./dist/server/main');
推荐阅读
- java - Java 多个键直接指向相同的值
- swift - 如何修复 GPUImage2 框架在从后台应用程序中删除时导致错误?
- sql - 将 MS SQL 服务器与 Google Data Studio 连接的最佳方式是什么?
- c - C结构自释放
- android - 如何解析 http 异常 401 上的成功正文响应?
- xamarin.forms - Xamarin Forms -> Activity Indicator not working if statements of statements to be executed
- google-chrome-extension - 如何从 chrome 扩展程序中询问谷歌密码?
- postgresql - 如何在 Haskell 中使用 postgresql-simple 插入 bytea 值
- php - 创建了数据库记录,但未插入具有键值对数据的数组 - json php
- python - ImportError:没有名为 redis 的模块 - Docker