Вместо того, чтобы делать это в файле main.ts , вы можете переопределить консольные методы (log, warn, error и т. Д. c) в app.module.ts файл непосредственно перед инициализацией приложения. Это можно сделать с помощью токена инжектора APP_INITIALIZER
, который позволяет запускать некоторые пользовательские логики инициализации c, необходимые для вашего приложения.
PLATFORM_ID
- это еще один токен инжектора, который предоставляется Angular один раз. платформа инициализируется (платформой может быть сервер, браузер или веб-работник), и она доступна до инициализации приложения. Используя этот токен, мы можем определить платформу с помощью метода isPlatformBrowser(platformId)
, который возвращает true
, если платформа является браузером.
Мы можем объединить две вышеупомянутые стратегии, чтобы переопределить консольные методы, как показано ниже.
app.module.ts
import {
NgModule,
Injector,
APP_INITIALIZER,
PLATFORM_ID
} from "@angular/core";
import { isPlatformBrowser, isPlatformServer } from "@angular/common";
import { environment } from '../environments/environment';
...
/**
* Factory method to override the console methods
* during app initialization
*/
function silenceConsoleMethods(injector: Injector) {
return () => {
const platformId = injector.get(PLATFORM_ID);
if (isPlatformBrowser(platformId) && environment.production) {
window.console.log = window.console.debug = window.console.warn = window.console.error = () => {};
} else if (isPlatformServer(platformId)) {
console.log = console.debug = console.warn = console.error = () => {};
}
};
}
@NgModule({
...
providers: [
{
provide: APP_INITIALIZER,
useFactory: silenceConsoleMethods,
deps: [Injector],
multi: true
}
],
bootstrap: [AppComponent]
})
export class AppModule {}
Вы можете найти рабочую версию приведенного выше примера в Stackbliz здесь . Чтобы продемонстрировать, как работает решение, я переопределил все методы ведения журнала консоли, кроме ошибок, чтобы отобразить сообщения об ошибках на консоли.
PS:
Вы можете использовать isPlatformServer(platformId)
для определите, является ли платформа серверной, и выполните любые логики инициализации c, связанные с рендерингом на стороне сервера.
Редактировать:
Обновлено silenceConsoleMethods()
в приложении Файл .module.ts для переопределения объекта консоли, когда приложение отображается с использованием Nodejs среды выполнения. Теперь вы не должны сталкиваться с какими-либо проблемами, когда приложение отображается на стороне сервера.