рдХреНрд░рд┐рдПрдЯ-рд░рд┐рдПрдХреНрд╢рди-рдРрдк рдХреА рддрд░рд╣ рд╣реА рд░реИрдЬрд╝рд▓ .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
... рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рд╕реНрдлреЛрдЯ рдХрд░рдирд╛)ред
рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ред рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ 'рд╡рд┐рдВрдбреЛ' рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ; рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ 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 рдХрд╛ рд╕рдмрд╕реЗ рд▓рдЪреАрд▓рд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкреЛрд░реНрдЯ рдХреЛ рд░рди-рдЯрд╛рдЗрдо рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрднреА рднреА рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдЕрдиреНрдп рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд░реИрдЬрд╝рд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреИрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ:
рд╕рдорд╕реНрдпрд╛:
рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ 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 рдХреЗ рд╕рд╛рде рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдШрд░реНрд╖ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рдХрдИ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП рд╣реИрдВред
рдпрд╣ рд╡реЗрдмрдкреИрдХ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдЪрдХрдорд╛ рджреЗрдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдХреИрд╕реЗ рдХреНрд░рд┐рдПрдЯ-рд░рд┐рдПрдХреНрд╢рди-рдРрдк рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд░реВрдмреА рдХреЛрдб рдХреЛ рджреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЙрд╕рдХреЗреЛрдХреВ рдкрд░ рдПрдХ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рд░реИрдЬрд╝рд▓ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рд┐рдПрдХреНрдЯ рдРрдк рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИ:
рд░рдирдЯрд╛рдЗрдо рдПрдирд╡реА рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
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';
рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░реНрд╡рд░.рдЬреЗрдПрд╕ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рдирдЯрд╛рдЗрдо рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╕рд╛рде {{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 рдкреЛрд░реНрдЯ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@jaredpalmer рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА PORT рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд░реАрдбрдореА рдбреЙрдХреНрд╕ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред
process.env.MY_THING
рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рдиprocess.env.PORT
рдХреЛ рдЕрднреА рднреА рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкрдврд╝рд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рд╣реЗрд░реЛрдХреВ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИредрдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдореБрдЭреЗ PORT, HOST, рдЖрджрд┐ рдХреА рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИред