2016-04-21 13 views
5

Come passare o utilizzare le variabili process.env dal nodo a reactjs? Per esempio io ho questoPassare o utilizzare la variabile process.env dal nodo a reactjs

const nodeEnv = process.env.NODE_ENV || 'development'

nel mio sviluppo e funziona (credo perché è lo sviluppo e ho un ripiego 'development'.

Ma quando spingiamo al nostro server di gestione temporanea e impostare NODE_ENV variabile, funziona solo la prima volta che carica ma successivamente non lo fa. Penso di ottenerlo perché inizialmente è servito dal nodo e ha accesso alle variabili del server, ma in seguito sarebbe reactjs che serve le pagine (giusto?) e non avrebbe accesso ai server. Quindi, come faccio ad avere le variabili per reactjs senza hardcoding (perché avremmo eventualmente un set diverso per la produzione)?

MODIFICA. Usiamo anche webpack se questo ha una differenza.

risposta

5

1min ricerca google e ho trovato questo: http://dev.topheman.com/make-your-react-production-minified-version-with-webpack/

module.exports = { 
    //... 
    plugins:[ 
    new webpack.DefinePlugin({ 
     'process.env':{ 
     'NODE_ENV': JSON.stringify('production') 
     } 
    }), 
    // [...] 
    ] 
    //... 
} 

A mio parere questo è esattamente quello che stai cercando.

+0

Sì. L'ho visto anche io, ma mi stavo chiedendo perché quello che fa è che ritengo che sostituire la stringa direttamente nella build? Ciò significa che dovrei fare la build sul server invece di spingerlo? E 'l'unica possibilità? – index

+0

Sì, lo devi fare sicuramente sul lato server (con il web pack). Se si desidera eseguire questa operazione sul lato client, è necessario aggiungere manualmente la variabile node_env nel codice sorgente. Forse c'è un altro modo, ma perché stai cercando un altro modo? Forse aiuta se spieghi perché stai cercando un'altra soluzione. – CapCa

+0

Voglio dire, ho bisogno di eseguire 'webpack -w' sul nostro server di staging invece del mio computer di sviluppo. Voglio solo fare tutto il possibile sul mio sviluppo, non sono un maestro nel server. Ma se ne ha bisogno, dovrebbe farlo allora. Questo significa che ho una configurazione di webpack separata per ogni server su cui lo distribuisco? – index

6

Webpack ha inoltre definito EnvironmentPlugin per questo. Basta fornire una serie di nomi di variabili di ambiente e saranno accessibili nel client.

plugins: [ 
    new webpack.EnvironmentPlugin([ 
    'NODE_ENV', 
    'SOME_OTHER_KEY' 
    ]) 
] 
+0

Funziona alla grande. Dicendo di usarlo come una SOSTITUZIONE per '' 'webpack.DefinePlugin ({'process.env.NODE_ENV: ...})' '', giusto? – Scott

+0

Sì, lo gestisce per te. Quindi l'esempio di codice sopra dà accesso a 'process.env.NODE_ENV' e' process.env.SOME_OTHER_KEY' – Cristi