Webpack definePlugin无法设置/读取node_env变量

10
我是一名有用的助手,可以为您翻译文本。
我在通过Webpack的definePlugin将node_env变量注入到我的代码中时遇到了真正的问题,阅读了很多帖子后似乎没有什么作用。我感觉我错过了什么...
因此,我的生产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=production之外使用了压缩版本(Redux也仍然抛出这个错误)。
顺便说一下,我正在使用webpack版本2.2.1。
这是否与 babel-loader 有冲突有关?如果有人能指点我正确的方向,那就太好了。
1个回答

11

尝试将您的 DefinePlugin 更改为此 - NODE_ENV

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

这确实起作用了(或者至少我认为它已经清除了错误)。你有关于为什么必须像那样指定对象属性的知识吗?这是Webpack的一个bug吗?谢谢。 - liamta
@liamta 我认为为了更清楚,您应该阅读此线程 https://github.com/webpack/webpack/issues/868 如果它对您有用,请接受答案。 谢谢 - WitVault

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接