Я добавляю Raygun.io
APM в наше приложение Angular 8 с Angular Universal.
Известно, что raygun.io
имеет библиотеку JavaScript на стороне клиента и добавляет ее в Angular with Universal, DOMAPI окна должен быть создан. Это можно сделать с помощью domino npm, используя следующий код:
Существует также руководство по установке Angular через npm под названием 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
, выполните команду build and run - найдено исключение:
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.....
Вопрос в том, как NodeJS может читать raygunUtilityFactory
функцию во время сборки, если она не может найти ее в оконном API?
ОБНОВЛЕНИЕ: Я пыталсячтобы сделать это в меньшем проекте, но кажется, что даже его документ для установки raygun.io
не содержит процедур для Angular Universal
. Он в основном не может обнаружить оконный API, используя domino
Raygun.Utilities = raygunUtilityFactory(window, Raygun);
^
ReferenceError: raygunUtilityFactory is not defined