我正在Raygun.io
使用 Angular Universal 将 APM 添加到我们的 Angular 8 应用程序中。
众所周知,raygun.io
有一个客户端 javascript 库并将其添加到具有 Universal 的 Angular 中,必须创建 DOM 窗口 API。这可以使用以下代码使用 domino npm 来完成:
还有一个通过 npm 安装 Angular 的指南,raygun4js
但是问题仍然存在。
// Domino for defining Windows API in SSR
(found @ https://www.npmjs.com/package/domino )
const domino = require('domino');
const fs = require('fs');
const path = require('path');
const template = fs.readFileSync(index.html).toString();
const win = domino.createWindow(template);
global['window'] = win; // will be used for NodeJS to read Window API
global['document'] = win.document;
*domino 创建一个窗口 api 并将其设置为一个名为 win 的全局变量。将此行添加到 NPM 项目server.ts
后,构建并运行命令 - 发现异常:
Raygun.Utilities = raygunUtilityFactory(window, Raygun);
^
ReferenceError: raygunUtilityFactory is not defined
这源于一个raygunUtilityFactory
函数未在窗口 API 中定义。raygun.js
在 Github 中查看内部
window.raygunUtilityFactory = function(window, Raygun) {
var rg = {
getUuid: function() {
function _p8(s) {
var p = (Math.random().toString(16) + '000000000').substr(2, 8);
return s ? '-' + p.substr(0, 4) + '-' + p.substr(4, 4) : p;
}
// more code.....
问题是,如果 NodeJSraygunUtilityFactory
在窗口 API 中找不到函数,它如何在构建期间读取函数?
更新:我尝试在一个较小的项目上执行此操作,但似乎即使它的安装文档raygun.io
也不包括Angular Universal
. 它基本上无法使用检测窗口 APIdomino
Raygun.Utilities = raygunUtilityFactory(window, Raygun);
^
ReferenceError: raygunUtilityFactory is not defined