Webpack DefinePlugin 未设置/读取 node_env 变量

问题描述 投票:0回答:2

我在通过Webpack的definePlugin将node_env var注入到我的代码中时遇到了真正的问题,并且在阅读了大量帖子后似乎没有任何效果。我有一种感觉,我错过了一些东西......

所以我的生产 webpack 配置是 -

// Config
import path from 'path';
import webpack from 'webpack';
import config from './config';


/**
 * Webpack config for compiling the
 * React/Redux/ES6 scripts.
 *
 * ENV = production
 *
 * @type {Object}
 */
module.exports = {
    entry: path.resolve(__dirname, '../', config.assets.scripts.src_dir, config.assets.scripts.entry),
    devtool: false,
    output: {
        path: path.resolve(__dirname, config.assets.scripts.dist_dir),
        filename: config.assets.scripts.dist_min
    },
    module: {
        loaders: [
            {
                test: /.js?$/,
                loader: 'babel-loader?presets[]=react,presets[]=es2015,presets[]=stage-0',
                exclude: /node_modules/
            },
            {
                test: /\.json$/,
                loader: 'json-loader'
            }
        ]
    },
    plugins: [
        new webpack.DefinePlugin({
            'process.env': {
                'NODE_ENV': JSON.stringify('production')
            }
        }),
        new webpack.optimize.UglifyJsPlugin({})
    ]
};

我已经尝试为react、react-dom和react-redux设置别名,但完全没有效果,React仍然警告我我正在使用node_env=product之外的缩小版本(而且redux仍然会抛出这个错误)。

仅供参考,我正在使用 webpack 版本 2.2.1。

这是否与 babel-loader 存在某种冲突有关?如果有人能指出我正确的方向,那就太好了。

reactjs webpack react-redux
2个回答
11
投票

尝试将

DefinePlugin
中的
NODE_ENV
更改为这个 -

plugins: [
    new webpack.DefinePlugin({
        'process.env.NODE_ENV' : JSON.stringify('production')
    }),
    new webpack.optimize.UglifyJsPlugin({
        minimize : true,
        compress : {
            warnings : false
        }
    })
]

0
投票

现在您可以使用更简单的EnvironmentPlugin

https://webpack.js.org/plugins/environment-plugin/

它的功能与 DefinePlugin 完全相同(当您只是转发环境变量时),但语法更简单

例如

new webpack.EnvironmentPlugin(['NODE_ENV'])

© www.soinside.com 2019 - 2024. All rights reserved.