getClientEnvironment
μμ± λ°©μμΌλ‘ μΈν΄ PORT νκ²½ λ³μλ process.env.PORT
λ‘ μ μ§λλ λμ μ΅μ’
λΉλμ μΈλΌμΈλ©λλ€.
μ΄λ‘ μΈν΄ Razzleμ΄ start:prodλ₯Ό μ¬μ©νμ¬ Herokuμμ μμ νμ§ λͺ»ν©λλ€ .
λλ λν getClientEnvironment
stringified
ν¨μκ° μμ±λλ λ°©μμμ μ 체 process.env
κ° λͺ¨λ νκ²½ λ³μλ₯Ό ν¬ν¨νλ μΈλΌμΈλ κ°μ²΄λ‘ λ체λλ€λ κ²μ μμμ΅λλ€.
// console.log(process.env.PORT) gets compiled to:
console.log(Object({"NODE_ENV":"production","PORT":3000,"VERBOSE":false,"HOST":"localhost","RAZZLE_ASSETS_MANIFEST":"somepath","BUILD_TARGET":"server","RAZZLE_PUBLIC_DIR":"somepath"}).PORT);
μ΄λ κ² νλ©΄ λ§€λ² λ€μ λΉλνμ§ μκ³ μλ² μ± κ΅¬μ±μ λμ μΌλ‘ λ§λλ κ²μ΄ λΆκ°λ₯ν©λλ€.
μλ
νμΈμ @d4rky-pl,
razzle-herokuλ₯Ό μ¬μ©ν μ μμ΅λλ€. :) κΈ°λ³Έ razzle ꡬμ±μ νμ₯νμ¬ herokuμμ μλνλλ‘ ν©λλ€.
μμΈν λ΄μ©μ #340μ μ°Έμ‘°νμΈμ.
@xouabita λ©μ§λ€μ κ°μ¬ν©λλ€ :)
Razzleμ΄ κΈ°λ³Έμ μΌλ‘ μ΄κ²μ μ§μνκ±°λ process.env
μ λν κ²½κ³ κ° μμ΄μΌ νκ³ νλ‘λμ
λΉλκ° λ λμ μ λμ΄μΌ νλ€κ³ μκ°ν©λλ€.
μ΄κ²μ λ΄κ° μμνλ κ²λ³΄λ€ ν¨μ¬ λ λ¬Έμ κ° λλ κ²μΌλ‘ νλͺ λμμ΅λλ€. μ€λͺ νκ² μ΅λλ€:
μ λ μμ€ν ν μ€νΈ λ¬λ(μμ€ν ν μ€νΈ: μ€μ λΈλΌμ°μ μμ μ€νλλ ν μ€νΈ)λ₯Ό μμ± μ€μ΄λ©° 첫λ λΆν° razzle μ§μμ μΆκ°νκ³ μΆμ΅λλ€. λ¬Έμ λ PORTκ° κ²°κ³Ό λΉλμμ μΈλΌμΈλκΈ° λλ¬Έμ ν μ€νΈνκΈ° μ μ λͺ¨λ κ²μ μ»΄νμΌν λλ μΈλΌμΈν΄μΌ νλ€λ κ²μ λλ€.
ν μ€νΈμμ μΈλΌμΈλ PORTκ° "μ μ" νλ‘λμ μ»΄νμΌ λμμ ν¬νΈμ λ€λ₯΄κΈ° λλ¬Έμ λκ΅°κ° λ€λ₯Έ κ²μ λμΌν λΉλλ₯Ό μ¬μ©νλ €κ³ ν λ λΆνμν νΌλμ μΌμΌν¬ μ μμ΅λλ€(κ²°κ΅ νλ‘λμ λΉλμ΄κ³ PORT μ μΈ). . ν μ€νΈλ₯Ό μ€νν ν λΉλλ₯Ό μμ ν μλ μμ§λ§ νλ‘λμ λ°°ν¬ μ μ μμ€ν ν μ€νΈλ₯Ό μνν λ€μ λμΌν μ»΄νμΌλ μ½λλ₯Ό μ¬μ¬μ©νλ νλ¦μ΄ μ€λ¨λ©λλ€.
@jaredpalmer νλ‘λμ
λΉλμμ PORTλ₯Ό μΈλΌμΈνκΈ°λ‘ ν κ²°μ μ μ¬κ³ νκ³ const PORT = process.env.PORT
μ κ°μ κ²)λ₯Ό μΆκ°νμμμ€. μ§μ₯μ κ·Έλ΄ κΈ°νκ° μλ€λ©΄ μ΄ λ¬Έμ λ₯Ό λ«μμ£ΌμΈμ. κ·Έλ¬λ©΄ μ λꡬμ λ©΄μ±
μ‘°νμ μΆκ°νκ² μ΅λλ€. :)
@d4rky-pl μ λλ‘ λ§λ€μ.
μ°λ¦¬κ° λΈλ리μ€νΈμ μ€λ₯΄λ κ²½μ°
process.env.RAZZLE_SERVER_
λ μ»΄νμΌλμ§ μμ΅λλ€.PORT
λΉμ μ΄ μ΄κ²μ μκ³ μλ€κ³ νμ νμ§λ§ λ°νμ μ€μ process.env.
μμ μ½λ κ²μ μμ²λκ² λλ¦¬κ³ κ°λ₯ν ν νΌν΄μΌ νλ κ²μ
λλ€. κ·Έλ¬λ razzleμ΄ heroku λ±μ λ μ½κ² λ°°ν¬ λ μ μλ€λ©΄ λ μ’μ κ²μ
λλ€. μ΄κ²μ μμλ΄μ.
λλ μ΄κ²μ μ’μνλ€. PORT
κ²½μ° μ±λ₯μ λ¬Έμ κ° μμ΄μΌ νλ©° μ΄ νκ²½ λ³μλ λΆν
μμλ§ μ½νμ§λλ€.
RAZZLE_SERVER_
μ κ΄ν΄μλ μ΄λ¦μ΄ νμ€νμ§ μμ§λ§ λͺ κ°μ§ μΆκ° κ²½μ°μ λν μ’μ ν΄κ²° λ°©λ²μ²λΌ λ€λ¦½λλ€. μ¬λλ€μ΄ μ΄κ²μ΄ λͺ¨λ κ²μ μ€μ ν΄μΌ νλ λ°©λ²μ΄λΌκ³ κ°μ νλ©΄ νΌλμ€λ½κ³ μ±λ₯μ΄ μ νλ μ μμ΅λλ€. μλ² μΈ‘ νκ²½ λ³μ(μμ© νλ‘κ·Έλ¨ λΆν
μ€μ μ€μ λ‘ μ¬μ μνλ €λ λ³μ λμ ). κ·Έλλ λ λμ μ νμ§κ° μλ κ² κ°μ λλ ΅μ΅λλ€.
λλ κ°μ λ¬Έμ κ° μμκ³ λΉλ νμμ μ μλμ§ μμ env varsμμλ λ°μν©λλ€. ν΄κ²° λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
/* eslint-disable no-param-reassign */
const razzleConfigEnv = require('razzle/config/env');
module.exports = {
modify: (config, { target, dev }, webpack) => {
// Fix process.env
if (target === 'node') {
config.plugins = config.plugins.filter(plugin => plugin.constructor.name !== 'DefinePlugin');
const dotenv = razzleConfigEnv.getClientEnv(target, {
clearConsole: true,
host: 'localhost',
port: 3000
});
config.plugins.push(
new webpack.DefinePlugin({
'process.env': `Object.assign(${JSON.stringify(dotenv.raw)}, process.env)`
})
);
}
return config;
}
};
μ΄κ²μ Herokuμ λν λ΄ ν΄κ²° λ°©λ²μ λλ€.
// getPorts.js
// bypass webpack.DefinePlugin
const { env } = require('process')
export const port = () =>
parseInt(
env.RAZZLE_PORT ||
env.PORT ||
process.env.RAZZLE_PORT ||
process.env.PORT ||
3000,
10,
)
ν! κ·Έλμ μ¬κΈ° μ€ν μμ€μ μΌμ μ 무 λ° μν μ¬μ΄μ κ±°λκ° μμ΅λλ€. κ΄λ¦¬ν΄μΌ ν κ²μ΄ λ§κΈ° λλ¬Έμ GitHub λ΄μ μ¬μ©νμ¬ μ¬κΈ°μ κΈ°μ λͺ κ°μ§λ₯Ό μλνν©λλ€. μ΄ νΉμ GitHub λ΄μ μ΅κ·Ό νλμ΄ νλμ μμκΈ° λλ¬Έμ μ΄κ²μ λΆμ€ν κ²μΌλ‘ νμν κ²μ λλ€. λ©°μΉ λμ λ μ΄μ νλμ΄ μμΌλ©΄ νμλ©λλ€. μ΄ μμ μ κ°μΈμ μΌλ‘ μ¬κ°νκ² λ°μλ€μ΄μ§ λ§μμμ€. μ΄κ²μ μμ ν μλνλ μμ μ λλ€. μ΄κ²μ΄ μ€μλΌλ©΄ λκΈ, DM, μΊλ¦¬μ΄ λΉλκΈ° λλ μ°κΈ° μ νΈλ₯Ό 보λ΄μ£Όμμμ€.
λΉνμ± μνλ‘ μΈν΄ ProBotμ΄ μ΄λ₯Ό μλμΌλ‘ λ«μμ΅λλ€. μ΄κ²μ΄ μ€μλΌλ©΄ Holler, κ·Έλ¦¬κ³ μ°λ¦¬λ κ·Έκ²μ λ€μ μ΄ κ²μ λλ€.
μ¬λλ€μ΄ μ¬μ ν μ΄λ €μμ κ²ͺκ³ μλ€λ©΄ μ΄ λ¬Έμ μ λν μμ£Ό κ°λ¨ν ν΄κ²° λ°©λ²μ μ°Ύμμ΅λλ€.
// This will extract the env during production execution.. PORT will not be inlined during build
const getEnv = c => process.env[c];
app.listen(getEnv('PORT'));
λλ κ°μ λ¬Έμ κ° μμκ³ λΉλ νμμ μ μλμ§ μμ env varsμμλ λ°μν©λλ€. ν΄κ²° λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
/* eslint-disable no-param-reassign */ const razzleConfigEnv = require('razzle/config/env'); module.exports = { modify: (config, { target, dev }, webpack) => { // Fix process.env if (target === 'node') { config.plugins = config.plugins.filter(plugin => plugin.constructor.name !== 'DefinePlugin'); const dotenv = razzleConfigEnv.getClientEnv(target, { clearConsole: true, host: 'localhost', port: 3000 }); config.plugins.push( new webpack.DefinePlugin({ 'process.env': `Object.assign(${JSON.stringify(dotenv.raw)}, process.env)` }) ); } return config; } };
λλ μ΄κ²μ μλνμ§λ§ λ΄ λ‘컬μμ 'npm run start:prod 'λ₯Ό μλνλ©΄ assets.jsonμ μ°Ύμ μ μλ€λ μ€λ₯κ° λ°μν©λλ€. λν npm ν¨ν€μ§ κ΄λ ¨ μ€λ₯λ λ°μνκ³ λΉλ ν΄λμ node_modulesλ₯Ό μ λ‘λν΄μΌ νλμ§ μ‘°μΈν΄ μ£Όμκ² μ΅λκΉ?
μ΄κ²μ μ§κΈ λλ₯Ό μν΄ μΌνκ³ μμ΅λλ€.
`
appConfig.plugins = appConfig.plugins.filter(νλ¬κ·ΈμΈ => plugin.constructor.name !== 'DefinePlugin');
const dotenv = razzleConfigEnv.getClientEnv(λμ);
delete dotenv.raw.PORT;
config.plugins.push(
new webpack.EnvironmentPlugin(dotenv.raw)
);
`
κ°μ₯ μ μ©ν λκΈ
μ¬λλ€μ΄ μ¬μ ν μ΄λ €μμ κ²ͺκ³ μλ€λ©΄ μ΄ λ¬Έμ μ λν μμ£Ό κ°λ¨ν ν΄κ²° λ°©λ²μ μ°Ύμμ΅λλ€.