【问题标题】:Angular Universal ReferenceError - KeyboardEvent is not definedAngular Universal ReferenceError - KeyboardEvent 未定义
【发布时间】:2019-07-22 20:31:38
【问题描述】:

我在 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 run serve: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"

有人知道如何摆脱这个错误吗?

【问题讨论】:

    标签: javascript angular webpack angular-universal universal


    【解决方案1】:

    给你

    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');
    

    【讨论】:

    • 谢谢。这给出了新的错误:/dist/server.js:245610 ReferenceError: NodeList is not defined。请帮忙。
    【解决方案2】:

    在 server.ts 中添加这一行

    全局['KeyboardEvent'] = null;

    【讨论】:

    • 这对我不起作用。请在您的回复中添加详细信息。
    猜你喜欢
    • 1970-01-01
    • 2020-11-12
    • 2020-08-05
    • 2020-02-15
    • 2020-05-28
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多