Razzle: рдЖрд░рдПрдлрд╕реА: рдкреНрд░рдХреНрд░рд┐рдпрд╛.env.RAZZLE_RUNTIME_XXXX

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдорд╛рд░реНрдЪ 2018  ┬╖  27рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jaredpalmer/razzle

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░

рдХреНрд░рд┐рдПрдЯ-рд░рд┐рдПрдХреНрд╢рди-рдРрдк рдХреА рддрд░рд╣ рд╣реА рд░реИрдЬрд╝рд▓ .env рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ (рдпрд╛рдиреА рд╡реЗрдмрдкреИрдХ рджреНрд╡рд╛рд░рд╛ _build_ рд╕рдордп рдкрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рдирд╛) рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдбреАрд▓ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓реЛрдЧ рд╕рдВрдШрд░реНрд╖ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

рд░реИрдЬрд╝рд▓ рдХреЗ рдкрд╛рд╕ рд░рдирдЯрд╛рдЗрдо рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдРрдкреНрд╕ рдХреЛ рдЕрдм/рд╣реЗрд░реЛрдХреВ/рдПрдЬрд╝реВрд░ рдЗрддреНрдпрд╛рджрд┐ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рддреИрдирд╛рдд рдХрд░ рд╕рдХреЗрдВред

рд╕реБрдЭрд╛рдпрд╛ рд╕рдорд╛рдзрд╛рди

рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди PORT , HOST , рдФрд░ RAZZLE_RUNTIME_XXXXXXX рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдЕрдиреНрдп env рдЪрд░ рдХреЛ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдПрдВред

рдкрд╣рд▓реЗ

рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ (рдЕрд░реНрдерд╛рдд рд╡реЗрдмрдкреИрдХ рджреНрд╡рд╛рд░рд╛ рдХрдбрд╝реЗ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ)

  • RAZZLE_XXXXXX
  • PORT
  • HOST

рдмрд╛рдж рдореЗрдВ

рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЙрдкрд▓рдмреНрдз

  • PORT
  • HOST
  • RAZZLE_RUNTIME_XXXXXXX

рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ (рдЕрд░реНрдерд╛рдд рд╡реЗрдмрдкреИрдХ рджреНрд╡рд╛рд░рд╛ рдХрдбрд╝реЗ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ)

  • RAZZLE_XXXXXX

рд╡рд┐рдЪрд╛рд░ - рд╡рд┐рдорд░реНрд╢

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк _only_ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ RAZZLE_XXXX рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рдХрд░рдирд╛ рд╣реИ рдЬреИрд╕реЗ razzle-heroku рдкреНрд▓рдЧрдЗрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рднреА рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред рдПрдХ рдУрд░, рдЗрд╕рд╕реЗ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд╣реЗрд░реЛрдХреВ рдиреЗ рдЗрд╕реЗ рдХреЙрдиреНрдлрд┐рдЧ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдирд╛рдо рджрд┐рдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП MONGO_URI )ред рджреВрд╕рд░реА рдУрд░, рдпрд╣ _too_ рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдЧрдбрд╝рдмрдбрд╝ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ (рдпрд╛рдиреА рд╕рд╛рдЭрд╛ рдЖрдЗрд╕реЛрдореЛрд░реНрдлрд┐рдХ рдХреЛрдб рдХреЗ рднреАрддрд░ рдПрдХ рд░рдирдЯрд╛рдЗрдо рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдВ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ undefined ... рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рд╕реНрдлреЛрдЯ рдХрд░рдирд╛)ред

рд╕рдореНрдмрдВрдзрд┐рдд

527 #526 #514 #477 #356 #285

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

@jaredpalmer рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА PORT рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд░реАрдбрдореА рдбреЙрдХреНрд╕ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред process.env.MY_THING рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди process.env.PORT рдХреЛ рдЕрднреА рднреА рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкрдврд╝рд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рд╣реЗрд░реЛрдХреВ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдореБрдЭреЗ PORT, HOST, рдЖрджрд┐ рдХреА рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИред

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

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ред рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ 'рд╡рд┐рдВрдбреЛ' рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ; рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ process.env рдХрд╛ рд╡рд┐рдкрд░реАрдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ред (рдПрдирд╡реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдкрдиреЗ рдПрдирд╡реА рд╡рд░реНрд░реНрд╕ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ) рдореИрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВред рдПрдирд╡реА рдПрдХ рдРрд╕реА рдЬрдЧрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╣рд╛рдВ рд╕рд░реНрд╡рд░ рд░рд╣рд╕реНрдп рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдерд╛ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИред

рдЕрдЧрд░ рдпрд╣ рдореЗрд░реЗ рдКрдкрд░ рдерд╛, рддреЛ process.env.RAZZLE_INLINED_XXXXXX рдЪрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рд╕рдВрдХрд▓рд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, (рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЗрдирд▓рд╛рдЗрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд▓рдЧрдЗрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз) рдФрд░ рдХреБрдЫ рднреА рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред

NODE_ENV рдХреЛ рднреА рдЗрдирд▓рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреНрдпрд╛рджрд╛рддрд░ рдмрд┐рд▓реНрдб рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдЙрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рддрд░рд╣ рдХреБрдЫ рд╡реИрд░рд┐рдПрдмрд▓ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдг рднреА рд╣реИрдВред

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

рдореИрдВ рд╕рдВрдШрд░реНрд╖ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╣ рдирд╣реАрдВ рдерд╛ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдкрд░ up рд╕рд╛рде рддреИрдирд╛рддреА рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░ рджрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЕрдм razzle.config.js рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг RAZZLE_XXX рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ process.env.XXX ред рдореИрдВ process.env рдорд╛рдзреНрдпрдо рд╕реЗ рд░рдирдЯрд╛рдЗрдо рд╡рд░реНрд░реНрд╕ рдХреА рдЕрдиреБрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рд░реИрдЬрд╝рд▓ рдХреЛ рдореМрдЬреВрджрд╛ рд░рд┐рдПрдХреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдкреЛрд░реНрдЯ рд░рди-рдЯрд╛рдЗрдо рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдиреНрдп process.env рдЪрд░ рд╕рд░реНрд╡рд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред

рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдкрд░ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░:

process.env.PORT
process.env.NODE_ENV;
process.env.ASSETS_MANIFEST;
process.env.HOSTING_SET_VARIABLE;

рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдкрд░ рдмрди рдЬрд╛рддрд╛ рд╣реИ:

3000;
'development';
'/Users/[...]/build/assets.json';
undefined;

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

рдпрджрд┐ рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕рд░реНрд╡рд░ рдкрд░, рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд╣реА рд░рд╣ рд╕рдХрддрд╛ рд╣реИ):

process.env.PORT || 3000;
process.env.NODE_ENV || 'development';
process.env.ASSETS_MANIFEST || '/Users/[...]/build/assets.json';
process.env.HOSTING_SET_VARIABLE;

рдЗрд╕ рддрд░рд╣, рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдореЗрдВ process.env.PORT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 3000 рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдпрджрд┐ рд░реИрдЬрд╝рд▓ PORT=80 рд╕рд╛рде _рдмрд┐рд▓реНрдЯ_ рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ process.env.PORT рдХреЛ 80 рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдиреЗ рдЗрд╕реЗ process.env.PORT || 80 рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡реИрд╕рд╛ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ рдЬреИрд╕рд╛ рдЕрднреА рд╣реИред

рдпрджрд┐ рд░реИрдЬрд╝рд▓ PORT=81 рд╕рд╛рде _run_ рд╣реИ (рдЬрдмрдХрд┐ 80 рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ 80 рд░рд╣реЗрдЧрд╛ рдЬрдмрдХрд┐ рд╕рд░реНрд╡рд░ рдЪрд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо 81 ред

рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реНрдг рдкрд╢реНрдЪ рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП process.env рдХрд╛ рд╕рдмрд╕реЗ рд▓рдЪреАрд▓рд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкреЛрд░реНрдЯ рдХреЛ рд░рди-рдЯрд╛рдЗрдо рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрднреА рднреА рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдЕрдиреНрдп рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд░реИрдЬрд╝рд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреИрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ:

  1. рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП process.env рдЪрд░ рдХреЛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рдмрджрд▓реЗрдВ (https://webpack.js.org/plugins/define-plugin/#usage рдФрд░ Nodejs рдзреАрдореЗрдкрди рдкрд░ https://github.com/nodejs/node/issues рдкрд░ рдорд┐рдирд┐рдлрд┐рдХреЗрд╢рди рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред /3104)
  2. рдЙрди рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдПрдВ рддрд╛рдХрд┐ рдЖрдЗрд╕реЛрдореЗрдЯреНрд░рд┐рдХ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрдо рд╣реЛред

рд╕рдорд╕реНрдпрд╛:

  • process.env рдкрд░реНрдпрд╛рд╡рд░рдг _variables_ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрд╕реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рд╕реЗ рдЗрд╕рдХрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
  • process.env рдореЗрдВ рдЕрдХреНрд╕рд░ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд╣рд┐рдд рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реНрд░реЛрдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рджреЗрд╡ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдПрдХ рдЪреАрдЬ рд╣реИ - process.env - рди рдХреЗрд╡рд▓ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рдХрд┐ рдХреБрдВрдЬреА рдХреЗ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдХрд╛ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рднреА рд╣реЛрддрд╛ рд╣реИред
  • рдЗрд╕реЗ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдЕрдиреНрдп рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЙрдХрд░ рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рддрд╛ рд╣реИ (рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдмрд┐рд▓реНрдб рдХреЛ рд╕реНрд╡рдпрдВ рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ) рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ (рдЙрдкрдпреЛрдЧреА рдЬрдм рдПрдХ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдЫрд╡рд┐ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд▓реЛрдЪрджрд╛рд░ рдмреАрдирд╕реНрдЯреЙрдХ, рд╣реЗрд░реЛрдХреВ, рдПрдЯ рдЕрд▓ред рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВред
  • рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ "RAZZLE_RUNTIME_" рдЙрдкрд╕рд░реНрдЧ рд╕реНрд╡-рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЙрдкрд▓рдмреНрдз рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдЪрд░ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "INLINED_" рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, ("ISOMORPHIC_INLINED_"?) рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реЛрдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ process.env рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
DefinePlugin рдмрд┐рд▓реНрдб рд╕реНрдерд┐рд░рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП razzle.config.js рдЬреИрд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рд╕рд░реНрд╡рд░ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рддрдХ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Redux configStore(window.__PRELOADED_STATE__) рдХреЗ рд╕рдорд╛рди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИред

рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдЕрдкрдЧреНрд░реЗрдб рдиреЛрдЯ рдПрдХ рдирдореВрдирд╛ razzle.config.js рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреБрд░рд╛рдиреЗ рдЬрдорд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ: рдореИрдВрдиреЗ рдХрд╣рд╛ "рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рди рдХрд░реЗрдВред" рд▓реЗрдХрд┐рди рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП process.env.NODE_ENV рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рдж рд╣реИ рдФрд░ "NODE_ENV" рдиреЗ рдЖрдо рддреМрд░ рдкрд░ "NODE_ENV = рдЙрддреНрдкрд╛рджрди рдХрд╛ рдЕрд░реНрде рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд┐рд░реНрдорд╛рдг рд╣реИ"

@gregmartyn рд╣рдореЗрдВ perf рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП NODE_ENV рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдмреИрдмреЗрд▓ рдкреНрд░реАрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдирд╡реА рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддрд░реНрдХ рд╕реАрдЖрд░рдП рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдПрд╕рдПрд╕рдЖрд░ рдЕрдХреНрд╕рд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рднреА рд╕реАрдЖрд░рдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣рдорд╛рд░реЗ рдирд┐рд░реНрдорд╛рдг рдЯреВрд▓рд┐рдВрдЧ (рдереЛрдбрд╝рд╛) рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред

рд╣рд╛рдВ; рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ NODE_ENV рдПрдХ рдЙрдкрдпреЛрдЧреА рдЕрдкрд╡рд╛рдж рд╣реИред рдпрд╣ рдЕрдкрдиреА рдмрд╛рдд рд╣реИ рдФрд░ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдХрд╕реНрдЯрдо рдПрд╕рдПрд╕рдЖрд░ рд╕рдорд╛рдзрд╛рди рд╕реЗ рд╕реАрдЖрд░рдП рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдБ рдкрд░ рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ: https://github.com/facebook/create-react-app/issues/2353

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реАрдЖрд░рдП рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд░реИрдЬрд╝рд▓ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдЖрд░рдП рдРрдк рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдХреЛрдб рд╕рд░реНрд╡рд░ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИред рд╕реАрдЖрд░рдП process.env рдХреЗ рд╕рд╛рде рдЬреЛ рдЪрд╛рд╣реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдЗрд╕рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЛрдб рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ, рдпрд╣ рдЦрд╛рд▓реА рд╣реЛрдЧрд╛ рдЕрдиреНрдпрдерд╛ред рджреВрд╕рд░реА рдУрд░ рд░реИрдЬрд╝рд▓ рдЕрдкрдиреЗ SSR рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рдХреЛрдб рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ process.env рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдиреЛрдб рд░рдирдЯрд╛рдЗрдо рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рдкреВрд░реНрдг рд╕реЗрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджрд╛рд░реНрде рд╣реЛред Process.env рдХрд╛ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрд░реНрде рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рдХрд┐ CRA рдиреЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ред рд╡реЗ "cra.inlines" рдЬреИрд╕реЗ "process.env" рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рдЕрдиреНрдп рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рдереЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдЗрд╕реЛрдореЙрд░реНрдлрд┐рдХ рдХреЛрдб рдПрдХ рдирд┐рд░реНрдгрдп рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ RAZZLE_XXX рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдП рдЧрдП рд╣реИрдВред

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬреЗ рдмрд┐рдирд╛ рдореИрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реВрдВ?

рд╡реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдирд╣реАрдВ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЖрдЗрд╕реЛрдореЙрд░реНрдлрд┐рдХ рдХреЛрдб рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ

@jaredpalmer рд╢рд╛рдпрдж рдпрд╣ рдореБрджреНрджрд╛ afterjs рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ? рдореИрдВ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рдХреЛрдб рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВ RAZZLE рдЙрдкрд╕рд░реНрдЧ рдХреЗ рдмрд┐рдирд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЛрдЯ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХрдо рд╕реЗ рдХрдо, рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ process.env рдХреЛ рдорд┐рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб env рд╡реИрд░рд┐рдПрдмрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dotenv рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдзрд╛рд░рдгрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдШреБрд╕рдкреИрда рд╣реИред

рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рд░реИрдЬрд╝рд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдХреИрд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕рд░реНрд╡рд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдЕрднреА рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдбреАрд▓-рдмреНрд░реЗрдХрд░ рд╣реИред

рдореИрдВ https://github.com/jaredpalmer/razzle/issues/477#issuecomment -363538712 рд╕реЗ рдПрдХ рдЖрдЗрд╕реЛрдореЛрд░реНрдлрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдРрдк рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЛ рджреЛрдмрд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдореБрдЦреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХрд░рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд░реНрд╡рд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдареАрдХ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╕рд░реНрд╡рд░ рдХреЛ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рдЗрд╕ RFC рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдореЗрдВ RAZZLE_XXXX рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдорд┐рд▓рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ HOST, PORT рдФрд░ REDIS_URL рдХреЗ рд╕рд╛рде рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдШрд░реНрд╖ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рдХрдИ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП рд╣реИрдВред

рдпрд╣ рд╡реЗрдмрдкреИрдХ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдЪрдХрдорд╛ рджреЗрдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред

рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдХреИрд╕реЗ рдХреНрд░рд┐рдПрдЯ-рд░рд┐рдПрдХреНрд╢рди-рдРрдк рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд░реВрдмреА рдХреЛрдб рдХреЛ рджреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЙрд╕рдХреЗреЛрдХреВ рдкрд░ рдПрдХ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рд░реИрдЬрд╝рд▓ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рд┐рдПрдХреНрдЯ рдРрдк рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИ:

env.ts

рд░рдирдЯрд╛рдЗрдо рдПрдирд╡реА рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

export interface EnvironmentStore {
  NODE_ENV?: string;
  [key: string]: string | undefined;
}

// Capture environment as module variable to allow testing.
let compileTimeEnv: EnvironmentStore;
try {
  compileTimeEnv = process.env as EnvironmentStore;
} catch (error) {
  compileTimeEnv = {};
  // tslint:disable-next-line no-console
  console.log(
    '`process.env` is not defined. ' +
    'Compile-time environment will be empty.'
  );
}

// This template tag should be rendered/replaced with the environment in production.
// Padded to 4KB so that the data can be inserted without offsetting character
// indexes of the bundle (avoids breaking source maps).
/* tslint:disable:max-line-length */
const runtimeEnv = '{{RAZZLE_VARS_AS_BASE64_JSON__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________}}';
/* tslint:enable:max-line-length */

// A function returning the runtime environment, so that
// JSON parsing & errors occur at runtime instead of load time.
export const loadRuntimeEnv = (): EnvironmentStore => {
  let env;
  if (typeof env === 'undefined') {
    if (compileTimeEnv.NODE_ENV === 'production') {
      try {
        env = JSON.parse((Buffer.from(runtimeEnv.trim(), 'base64').toString()));
      } catch (error) {
        env = {};
        const overflowsMessage = runtimeEnv.slice(32, 33) !== null;
        // tslint:disable-next-line no-console
        console.error(
          'Runtime env vars cannot be parsed. Content is `%s`',
          runtimeEnv.slice(0, 31) + (overflowsMessage ? 'тАж' : '')
        );
      }

    } else {
      env = compileTimeEnv;
    }
  }
  return env;
};

export default loadRuntimeEnv;

рдЙрдкрдпреЛрдЧ:

import { loadRuntimeEnv, EnvironmentStore } from './env';
const env: EnvironmentStore = loadRuntimeEnv();

const serverHost: string =env.RAZZLE_SERVER_HOST || 'localhost';

docker-start.js

рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░реНрд╡рд░.рдЬреЗрдПрд╕ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рдирдЯрд╛рдЗрдо рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╕рд╛рде {{RAZZLE_VARS_AS_BASE64_JSON___...}} рдкреНрд▓реЗрд╕рд╣реЛрдбрд░ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

require('newrelic');
const logger = require('heroku-logger');
const path = require('path');
const fs = require('fs');

const PLACEHOLDER = /\{\{RAZZLE_VARS_AS_BASE64_JSON_*?\}\}/;
const MATCHER = /^RAZZLE_/i;

const InjectableEnv = {

    inject: function(file, ...args) {

        const buffer = fs.readFileSync(file, { encoding: 'utf-8' });
        let injectee = buffer.toString();

        const matches = injectee.match(PLACEHOLDER);
        if (!matches) {
            return;
        }

        const placeholderSize = matches[0].length;

        let env = InjectableEnv.create(args);
        const envSize = env.length;
        const newPadding = placeholderSize - envSize;
        if (newPadding < 0) {
            console.log('You need to increase your placeholder size');
            process.exit();
        }
        const padding = Array(newPadding).join(' ');
        env = InjectableEnv.pad(padding, env);

        const injected = injectee.replace(PLACEHOLDER, env);

        fs.writeFileSync(file, injected, { encoding: 'utf-8' });
    },

    create: function() {

        const vars = Object.keys(process.env)
            .filter(key => MATCHER.test(key))
            .reduce((env, key) => {
                env[key] = process.env[key];
                return env;
            }, {});

        vars.NODE_ENV = process.env.NODE_ENV;

        if (typeof process.env.HOST !== 'undefined' && typeof vars.RAZZLE_SERVER_HOST === 'undefined') {
          vars.RAZZLE_SERVER_HOST = process.env.HOST;
        }

        if (typeof process.env.PORT !== 'undefined' && typeof vars.RAZZLE_SERVER_PORT === 'undefined') {
          vars.RAZZLE_SERVER_PORT = process.env.PORT;
        }

        if (typeof process.env.REDIS_URL !== 'undefined' && typeof vars.RAZZLE_REDIS_URL === 'undefined') {
          vars.RAZZLE_REDIS_URL = process.env.REDIS_URL;
        }

        return Buffer.from(JSON.stringify(vars)).toString('base64');
    },

    pad: function(pad, str, padLeft) {
        if (typeof str === 'undefined')
            return pad;
        if (padLeft) {
            return (pad + str).slice(-pad.length);
        } else {
            return (str + pad).substring(0, pad.length);
        }
    }
}

const root = process.cwd();
const serverBundle = path.resolve(path.join(root, '/build/server.js'));

if (fs.existsSync(serverBundle)) {
    logger.info('Injecting runtime env');
    InjectableEnv.inject(serverBundle);
    logger.info('Launching server instance');
    require(serverBundle);
}

рдбреЙрдХрд░рдлрд╛рдЗрд▓

# You should always specify a full version here to ensure all of your developers
# are running the same version of Node.
FROM node:8.9.4

ENV NODE_ENV=production \
    REACT_BUNDLE_PATH=/static/js/vendor.js \
    PATH=/app/node_modules/.bin:$PATH \
    NPM_CONFIG_LOGLEVEL=warn

RUN curl -o- -L https://yarnpkg.com/install.sh | bash

# use changes to package.json to force Docker not to use the cache
# when we change our application's nodejs dependencies:
COPY package.json yarn.lock /tmp/
RUN cd /tmp \
  && yarn install --production=false --pure-lockfile \
  && mkdir -p /app \
  && cp -a /tmp/node_modules /app \
  && yarn cache clean \
  && rm -rf *.*

# From here we load our application's code in, therefore the previous docker
# "layer" thats been cached will be used if possible
WORKDIR /app
ADD . /app

RUN yarn build

EXPOSE 3000

CMD ["node", "docker-start.js"]

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА

рд╕рдиреНрджрд░реНрдн:

рдХреНрд░рд┐рдПрдЯ-рд░рд┐рдПрдХреНрд╢рди-рдРрдк рдХреЗ рд▓рд┐рдП рд╣рд░реЛрдХреВ рдмрд┐рд▓реНрдбрдкреИрдХ
рдХреНрд░рд┐рдПрдЯ-рд░рд┐рдПрдХреНрд╢рди-рдРрдк рдХреЗ рд▓рд┐рдП рд╣рд░реЛрдХреВ рдмрд┐рд▓реНрдбрдкреИрдХ рдХреА рдЖрдВрддрд░рд┐рдХ рдкрд░рдд

рдпрд╣ рд╡реЗрдмрдкреИрдХ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдЪрдХрдорд╛ рджреЗрдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред

рд░реИрдЬрд╝рд▓ рд╡рд╣ рд╣реИ рдЬреЛ DefinePlugin рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд░реИрдЬрд╝рд▓ рдореЗрдВ рд╕реЙрд▓реНрд╡ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдореИрдВ рдЙрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдореБрдЭреЗ рдпрд╣ рдЧрд▓рдд рдорд┐рд▓рд╛ рд╣реИ: рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп, рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХреЛ process.env рдореЗрдВ рдбрд╛рд▓реЗрдВ рдЬреЛ рд╕рд░реНрд╡рд░ рдмрд┐рд▓реНрдб рдореЗрдВ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕рд░реНрд╡рд░ рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред (рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрд┐рд▓реНрдб рдкрд░ рднреА рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЪрд▓ рд╕рдХрд╛) рд╕рдорд╕реНрдпрд╛рдПрдБ: рдпрд╣ HMR рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдПрдХ рд╣реИрдХ рд╣реИ - рдпрд╣ рдПрдХ рдордирдорд╛рдирд╛ 4k рд╕реАрдорд╛ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ, рдпрд╣ env vars рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ - рд╡реЗ рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рд╕реНрдерд┐рд░рд╛рдВрдХ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдЪрд░рдг рд╣реИред

рдореИрдВрдиреЗ https://github.com/jaredpalmer/razzle/issues/528#issuecomment -377058844 рдореЗрдВ рдЬреЛ рдХреБрдЫ рдХрд╣рд╛ рд╣реИ, рдЙрд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдпрд╣ рдкрд╣рдЪрд╛рдирдирд╛ рд╣реИ рдХрд┐ рд░реИрдЬрд╝рд▓ рдФрд░ рд╕реАрдЖрд░рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреИрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред env рдЬрд┐рддрдирд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдЗрд╕реЗ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо 4 рд╕рдВрднрд╛рд╡рд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рд╕реНрдерд┐рд░ (рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо) рдФрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ (рдпрд╣рд╛рдВ, рдХрдВрдЯреЗрдирд░ рд╕реНрдЯрд╛рд░реНрдЯ рдЯрд╛рдЗрдо), рд╕реАрдХреНрд░реЗрдЯреНрд╕ рдФрд░ рдиреЙрди-рд╕реАрдХреНрд░реЗрдЯреНрд╕ред рд╣рдо рдЙрди рд╕рднреА 4 рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ (process.env.STATIC_PRIVATE_X, process.env.DYNAMIC_PUBLIC_Y, ...) рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдХреНрд▓реАрдирд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реЛрдВрдЧреЗред

рдЕрдЧрд░ process.env рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реИ - рд╕рд░реНрд╡рд░ рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реНрдЯреЛрд░ рдХреЗ рд░реВрдк рдореЗрдВ - рддреЛ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реИ: NODE_ENV рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдЗрдирд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдб рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реИред рд░рдирдЯрд╛рдЗрдо рдкрд░ NODE_ENV рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рд╣реИ рд╡рд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ process.env рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП razzle.build.X рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдкрд╛рд╕ рдХрд░реЗрдВ рдЬреИрд╕реЗ рд░реЗрдбрдХреНрд╕ рдХрд░рддрд╛ рд╣реИ?

рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдиреЛрдб рдкрд░ process.env рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреИрд╢ рд▓реЗрдпрд░ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдмрд╛рд░ process.env рдкрдврд╝рддрд╛ рд╣реИред

@gregmartyn рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╣реИрдХ рд╣реИ ... рдФрд░ рдпрд╣ рдПрдХ рдордирдорд╛рдирд╛ 4K рд╕реАрдорд╛ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ CRA рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рджреЗрдЦреЗрдВ) рдФрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд░рдирдЯрд╛рдЗрдо env рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИред

рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓рд╛ рдЬреЛ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЬрдбрд╝ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП - рдПрдирд╡реА рд╡рд░реНрд░реНрд╕ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕реБрдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдВ рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рднреА рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ PORT рдФрд░ HOST рднреА рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@tgriesser рдЕрдЪреНрдЫрд╛! рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рд╣реИред
PORT рдФрд░ HOST , рдореИрдВ рдЙрди рд╡рд░реНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ PUBLIC_PATH рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХрд╕реНрдЯрдо рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ server.js рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд░рд╣рд╛ рд░реИрдЬрд╝рд▓ рд╣реЙрдЯрд▓реЛрдбрд░ рдХреЗ рдХрд╛рд░рдг рдЙрд╕ рдорд╛рдирддрд╛ рд╣реИ ? рдореИрдВ рдЗрдиреНрд╣реЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдХреИрд╕реЗ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, рдореИрдВ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХрд╛рдо рдкрд░ рдпрд╣ рд╕рдм рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдмрдиреЗ рд░рд╣реЗрдВред #611 рдХреЗ рд╡рд┐рд▓рдп рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

config.js рдХреЗ рд╕рд╛рде рд░реАрдбрдореА рдореЗрдВ рдирдП рдЧрд╛рдЗрдб рдХреЗ рдмрд╛рдж рдмрдВрдбрд▓ рд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдПрдирд╡реА рдЪрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ :D

v2 рдиреЛрдЯ рджреЗрдЦреЗрдВ

@jaredpalmer рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА PORT рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд░реАрдбрдореА рдбреЙрдХреНрд╕ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред process.env.MY_THING рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди process.env.PORT рдХреЛ рдЕрднреА рднреА рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкрдврд╝рд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рд╣реЗрд░реЛрдХреВ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдореБрдЭреЗ PORT, HOST, рдЖрджрд┐ рдХреА рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ PORT рдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрд░ рдмрдирд╛рдирд╛ рднреА #581 рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рд╣реИред рдореБрдЭреЗ рдЗрд╕реЗ рдкреИрдЪ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдПрдХ razzle.config.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдПрдХ DefinePlugin рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред (рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!)

рдпрджрд┐ рдХреЛрдИ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ .env рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдЫреЛрдЯреЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
https://www.npmjs.com/package/razzle-plugin-runtimeenv

рдХреНрдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдЬрд╝реВрд░ рдкрд░ рд░реИрдЬрд╝рд▓ рдРрдк рдХреЛ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реВрдВред

рдпрджрд┐ рдХреЛрдИ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ .env рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдЫреЛрдЯреЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
https://www.npmjs.com/package/razzle-plugin-runtimeenv

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╣рдо рдПрдХ рд░реИрдЬрд╝рд▓ рдРрдк рдХреЛ рдХрдВрдЯреЗрдирд░рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдП рдЬрд╛ рд░рд╣реЗ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдХ рдЫрд╡рд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдкрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдРрдк рдкрд░ рдЙрдирдХреА рд╕реЗрд╡рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХреЛрдИ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдХреЗ рджреМрд░рд╛рди рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ:
https://github.com/HamidTanhaei/razzle-plugin-runtime/issues/1#issuecomment -525731273

рдЖрдк рд░рдирдЯрд╛рдЗрдо рдореЗрдВ razzle-plugin-runtime рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреА .env рдФрд░ .env.Development рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЖрдкрдХреЗ рдРрдк рдореЗрдВ рдЖрдкрдХреЗ env рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ axios рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
axios.defaults.baseURL = ${process.env.RAZZLE_APP_API_BASE_PATH}${process.env.RAZZLE_APP_API_VERSION} ;
рдФрд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрд╛рджрди ENV рдЪрд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
https://github.com/jaredpalmer/razzle#adding -temporary-environment-variables-in-your-shell

рдХреНрдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдЬрд╝реВрд░ рдкрд░ рд░реИрдЬрд╝рд▓ рдРрдк рдХреЛ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВрдиреЗ https://github.com/jaredpalmer/razzle/issues/906#issuecomment -467046269 рдкрд░ @fabianishere рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Azure рдкреЛрд░реНрдЯ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛

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

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

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

sebmor picture sebmor  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

panbanda picture panbanda  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

Jayphen picture Jayphen  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ