2016-12-20 8 views
2

Ich habe alle Artikel hier bei Stack-Überlauf und etwa 200 mehr von Google-Suchen gelesen und ich, für das Leben von mir, kann nicht meinen Kopf Prozess bekommen. env. Egal was ich mache, es ist immer ein leeres Objekt.webpack react process.env immer leer (windows 10)

const path = require("path"); 
const webpack = require('webpack'); 

module.exports = { 
    entry: { 
     search: './src/search/search_index.js', 
     // search: './src/search/search_index.js' 
    }, 
    output: { 
     path: path.join(__dirname, "../website/public/javascript/react"), 
     publicPath: '/', 
     filename: "[name].bundle.js" 
    }, 
    module: { 
     loaders: [{ 
      exclude: /node_modules/, 
      loader: 'babel', 
      query: { 
      presets: ['react', 'es2015', 'stage-1'] 
     } 
    }] 
    }, 
    resolve: { 
     extensions: ['', '.js', '.jsx'] 
    }, 
    devServer: { 
     historyApiFallback: true, 
     contentBase: './' 
    }, 
    plugins: [ 
     new webpack.DefinePlugin({ 
      "process.env" : { 
       'NODE_ENV': '"production"' 
      } 
     }) 
    ] 
}; 

"scripts": { 
    "start": "webpack-dev-server --inline --hot --content-base src/search", 
    "test": "mocha --compilers js:babel-core/register --require ./test/test_helper.js --recursive ./test", 
    "test:watch": "npm run test -- --watch" 
} 

console.log(process.env); // von einem Render-Methode in der laufenden Anwendung gestartet mit "npm start"

gibt immer {}

Ich versuche NODE_ENV die Produktion auf meinem Build zu erhalten gesetzt und haben null Glück% hatten NODE_ENV% show production, aber unabhängig davon erhalte ich die Warnmeldung in der Konsole darüber, dass er auf einem langsameren Build ausgeführt wird, um die NODE_ENV-Produktion zu verwenden.

Um zu versuchen, was passiert ist, wollte ich nur sehen, was meine App in process.env bekam und es ist ein leeres Objekt. Also habe ich versucht, es mit defineplugin zu programmieren, um noch einmal zu testen, was los ist und es ist das gleiche Ergebnis.

Hatte schon seit 3 ​​Stunden meinen Kopf dagegen geschlagen. Jede Hilfe wird geschätzt.

Antwort

3

Die DefinePlugin Konfiguration Sie verwenden ersetzt Vorkommen von process.env.NODE_ENV Ausdrücke in Ihrem Code mit je nachdem, welcher Wert, den Sie konfigurieren - es Verweise nicht zu process.env berühren wird, wie man es nicht mit genau dieser Ausdruck etwas gesagt haben zu tun - die Konfiguration, die Sie verwenden, ist nur eine Kurzform für das Ersetzen mehrerer Ausdrücke, die eine gemeinsame Wurzel teilen.

Webpack erkennt, dass Sie eine globale Variable process sind Referenzierung und die process mock von node-libs-browser Injektion, die, wie Sie env Objekt ein leeres definiert sehen können.

Sie können node Webpack config verwenden, um dies zu steuern. Durch das Hinzufügen von node: {process: false} zu Ihrer Konfiguration wird die Injektion eines Mocks für process deaktiviert.

+0

Ich habe es versucht mit Plugins aus der Konfigurationsdatei entfernt und es hat das gleiche Ergebnis. – Ominus

+1

Es wird erkannt, dass Sie auf ein 'process'-globales Objekt verweisen und ein Mock-Objekt einfügen. Dies ist standardmäßig aktiviert. –

+1

Sie, Sir, verdienen ein Bier! Vielen Dank! So viel Zeit wurde damit verschwendet. – Ominus