webpack react process.env总是空的(windows 10)

时间:2016-12-20 18:00:44

标签: node.js reactjs npm webpack

我已经阅读了堆叠溢出的所有文章以及谷歌搜索中的大约200篇文章,而且对于我的生活,我无法理解process.env。无论我做什么,它总是一个空的对象。

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); //来自正在运行的应用程序中使用"npm start"

开始的render方法

始终返回{}

我正在尝试将NODE_ENV设置为我的构建生产并且没有运气%NODE_ENV%显示生产但是无论我在控制台中收到关于它在较慢的构建上运行以使用NODE_ENV生产的警告消息。

要尝试解除发生的事情,我只是想看看我的应用在进程中发生了什么。它是一个空对象。那么我尝试使用defineplugin对其进行硬编码再次测试最新情况,结果相同。

现在已经对我的头撞了大约3个小时了。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:7)

您使用的DefinePlugin配置会使用您配置的值替换代码中process.env.NODE_ENV个表达式的出现次数 - 它不会触及对process.env的引用,因为您没有告诉它用这个确切的表达做任何事情 - 你正在使用的配置只是替换共享一个共同根的多个表达式的简写。

Webpack检测到您正在引用全局process变量并从process mock注入node-libs-browser,正如您所看到的那样定义了一个空的env对象。

您可以使用node Webpack config来控制此操作。将node: {process: false}添加到您的配置将禁用process的模拟注入。