Sentry-javascript: [рддреНрд░реБрдЯрд┐]ред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рдЬрдире░ 2020  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: getsentry/sentry-javascript

рдкреИрдХреЗрдЬ + рд╕рдВрд╕реНрдХрд░рдг

  • @sentry/browser ^5.11.0
  • @sentry/node ^5.11.0
  • node v12.7.0

рд╡рд┐рд╡рд░рдг

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдиреЗрдХреНрд╕реНрдЯрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдиреЗрдХреНрд╕реНрдЯрдЬ рдХрдореНрдпреБрдирд┐рдЯреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рд╣реИ ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдРрдк рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ:

[ error ] ./node_modules/@sentry/node/esm/integrations/console.js
Module not found: Can't resolve 'console' in '/.../node_modules/@sentry/node/esm/integrations'

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдРрдк рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдирд╛ рдпрд╛рд░реНрди рд▓реЙрдХ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдпрд╛ рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реБрдЖ! рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реЗ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ!

рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдореИрдВ рд╕рдВрддрд░реА рдХреЛ рдЗрд╕ рддрд░рд╣ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

import * as Sentry from '@sentry/node';

Screenshot from 2020-01-11 12-56-20

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@ 5tormTrooper рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрд╡рд╢реНрдпрдХ рдХрдерди рдореЗрдВ () рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЧрдпрд╛:

const withSourceMaps = require('@zeit/next-source-maps')()

рд╕рднреА 22 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ @zeit/next-source-maps рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдмрджрд▓ рджрд┐рдпрд╛:
@zeit/next-source-maps": "0.0.4-canary.1 ред

рддрдм рдореИрдВ рд╕рд╛рдл node_modules рдФрд░ рд╣рдЯрд╛рдпрд╛ yarn.lock рдФрд░ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг! рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ!

@afsanefda рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА node_modules yarn.lock node_modules рд╣рдЯрд╛рдиреЗ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ @zeit/next-source-maps": "0.0.4-canary.1 рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ ... рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХреЛрдИ рдЕрдиреНрдп рдХрд╛рдо рдХрд┐рдпрд╛ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рдерд╛?

рдЬреЛрдбрд╝реЗрдВ:

if (!options.isServer) {
  config.resolve.alias['@sentry/node'] = '@sentry/browser'
}

next.config.js

рдЗрд╕рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди?

рдЗрд╕рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди?

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЕрд╕рдВрдЧрддрд┐ рдХреЗ рдХрд╛рд░рдг рд╣реИред рдХреГрдкрдпрд╛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

рд╕реБрдЭрд╛рд╡ рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдФрд░ рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред

@ 5tormTrooper рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрд╡рд╢реНрдпрдХ рдХрдерди рдореЗрдВ () рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЧрдпрд╛:

const withSourceMaps = require('@zeit/next-source-maps')()

рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

@ рд╕рдВрддрд░реА/рдиреЛрдб^5.11.0

рдХреЛрдИ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@philkeys рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХреЛрд╢рд┐рд╢ рдХреА рдереАред рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВред

Next.js рдХреЛ ' 9.1.6 ' рд╕реЗ ' 9.3.5 ' рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдХреБрдЫ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ ' @ рд╕рдВрддрд░реА/рдиреЛрдб ' рдХрд┐рд╕реА рддрд░рд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдВрдбрд▓ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд▓рд╛рдЗрди рдиреЗ рдЕрдЪрд╛рдирдХ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред

if (!isServer) { config.resolve.alias['@sentry/node'] = '@sentry/browser'; }

рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рддреЗ рд╣реИрдВ? рдореИрдВрдиреЗ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕реА рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рднреА рд╕рдВрджрд░реНрднрд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рддрд░рд╣ рджреЗрд╡ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдмрджрд▓рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдпрджрд┐ рдореБрдЭреЗ рдХреЛрдИ рдареЛрд╕ рд╕рдорд╕реНрдпрд╛ рдФрд░ рд░реЗрдкреНрд░реЛ рдХреЗрд╕ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред

рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП @kamilogorek thxред рдореБрдЭреЗ рдХрд┐рд╕реА рдРрд╕реЗ рдореБрджреНрджреЗ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрджрд░реНрдн рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдУрдкреА рдиреЗ @zeit/next-source-maps рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ (рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)

рдореИрдВ рдПрдХ рдкреБрдирд░реБрддреНрдкрд╛рджрди рд░реЗрдкреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рд╕рдВрддрд░реА рдЯреЛрдХрди рдХреЗ рд╕рд╛рде .env рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреА рд╣реЛрдЧреАред

рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди?

рдореИрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреА рдмрд╛рд░реАрдХреА рд╕реЗ рдирдХрд▓ рдХрд░рдХреЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдПрд╕рдПрд╕рдЬреА ( next export ) рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╕рдордп рдореИрдВ рдлрд┐рд░ рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдПрд╕рдПрд╕рдЬреА рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░-рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд╡реЗрдмрдкреИрдХ рдЙрдкрдирд╛рдо (+ рд╕рдм рдХреБрдЫ рд╕рдВрджрд░реНрднрд┐рдд @sentry/node ) рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ . рдЕрдм рд╣рдо рдХреЗрд╡рд▓ @sentry/browser ред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рд▓рд╛рдЗрди рд╣реИ:

if (!isServer) { config.resolve.alias['@sentry/node'] = '@sentry/browser'; }

рдлрд┐рд░ рдЖрдкрдХреЛ @sentry/browser рднреА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддреНрд░реБрдЯрд┐ рдереЛрдбрд╝реА рднреНрд░рд╛рдордХ рд╣реИ ...

рдореЗрд░реЗ next.config.js рдореЗрдВ, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдлрдПрд╕: "рдЦрд╛рд▓реА" рд╡рд┐рдзрд┐ рдХрд░ рд░рд╣рд╛ рдерд╛, рд╕рд╛рде рд╣реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рд╕рдВрддрд░реА/рдиреЛрдб рдХреЛ рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛! isServer рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдХрдВрд╕реЛрд▓ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред рд╡рд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рд▓реЙрдЧ рдХрдВрд╕реЛрд▓ рдкрд░ рдореБрджреНрд░рд┐рдд рдирд╣реАрдВ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреБрджрд╛рдИ рдХрд░рдирд╛ (withSourceMaps, withSass, withOptimizedImages) рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдЬреЛрдбрд╝рдирд╛, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореЗрд░рд╛ рдмреЗрд╕ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдмрд╛рд╣рд░реА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдЪреЗрдирд┐рдВрдЧ рдХреА рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ (рд╡реЗ рд╡рд╛рдкрд╕ рдЖрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ config рд╕реНрд╡рдпрдВ рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрднреА рднреА рдмрдВрдж рд╣реИ):

module.exports = withBundleAnalyzer(
    withSourceMaps(
        withSass(
            withOptimizedImages(baseConfig)
        )
    )

рддреЛ рдЖрдкрдХрд╛ fs: "рдЦрд╛рд▓реА" рдХрд╛ рдХрднреА рд╕рдореНрдорд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЬреЛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╡рд╣ рдпрд╣ рдерд╛ рдХрд┐ рдЕрдЧрд▓рд╛-рд▓рд┐рдЦреЗрдВ-рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдирд┐рд░реНрдпрд╛рдд рдХреЛ рдмрджрд▓ рджреЗрдВ

module.exports = withPlugins(
  [
    [withOptimizedImages],
    [withSass],
    [withSourceMaps],
    [withBundleAnalyzer],
  ],
  baseConfig
);

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рд▓рд╛рдЗрди рд╣реИ:

if (!isServer) { config.resolve.alias['@sentry/node'] = '@sentry/browser'; }

рдлрд┐рд░ рдЖрдкрдХреЛ @sentry/browser рднреА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддреНрд░реБрдЯрд┐ рдереЛрдбрд╝реА рднреНрд░рд╛рдордХ рд╣реИ ...

@vpontis , рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореИрдВ Vue.js рдХреЗ рд╕рд╛рде рд╕рдВрддрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдФрд░ рдЗрд╕реЗ vue.config.js . рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИ

  chainWebpack: (config) => {
    config.resolve.alias['@sentry/node'] = '@sentry/browser'
  }

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рддреЛ рдореИрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдпрджрд┐ рдЖрдк рдиреЗрдХреНрд╕реНрдЯ-рд╕реЛрд░реНрд╕-рдореИрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ @zeit/next-source-maps рдкреИрдХреЗрдЬ 0.0.4-canary.1

рдореБрдЭреЗ next.config.js рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореИрдВ next-source-maps рд╕рд╛рде рд╕рдВрддрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИред

if (process.env.NEXT_PUBLIC_SENTRY_DSN) { Sentry.init({ enabled: true, dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, }); }

рдХреНрдпрд╛ рдореИрдВ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рд╣реИ рдореЗрд░реА _app.js рдХреЗ рдмрд╛рдж рдореИрдВ рд╕реНрдерд╛рдкрд┐рдд @sentry/node @sentry/browser @sentry/react рдФрд░ рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ @zeit/next-source-maps" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рддреЛ рдореИрдВ рдЗрд╕рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛": "0.0.4-рдХреИрдирд░реА.1 рднреА!

рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд▓рдЧрдЗрди рд╣рдЯрд╛ рджрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдХреЛрдб рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧ рдХреЛ рдЕрдЧрд▓реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛:

const { dev } = options

      if (!dev) {
        config.devtool = options.devtool || 'source-map'

        for (const plugin of config.plugins) {
          if (plugin.constructor.name === 'UglifyJsPlugin') {
            plugin.options.sourceMap = true
            break
          }
        }

        if (config.optimization && config.optimization.minimizer) {
          for (const plugin of config.optimization.minimizer) {
            if (plugin.constructor.name === 'TerserPlugin') {
              plugin.options.sourceMap = true
              break
            }
          }
        }
      }

рдпрд╣ рд╕рдВрддрд░реА рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реЗ рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рд╣реИ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

zishon89us picture zishon89us  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Taewa picture Taewa  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mattkrick picture mattkrick  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ma2gedev picture ma2gedev  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

simllll picture simllll  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ