Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Webpack4在生产模式下,在React.Component状态下是否不显示变量名?_Reactjs_Webpack_Production - Fatal编程技术网

Reactjs Webpack4在生产模式下,在React.Component状态下是否不显示变量名?

Reactjs Webpack4在生产模式下,在React.Component状态下是否不显示变量名?,reactjs,webpack,production,Reactjs,Webpack,Production,react组件状态下的变量名称在生产模式下不会被webpack 4更改 我尝试了“uglifyjs网页包插件”:“^2.1.3”,但没有什么不同 比如说, 类计数器扩展React.Component{ 建造师(道具){ 超级(道具); this.state={count:props.initialCount}; } // ... } 我想在生产中,州名count被丑化。 我想是这样的 this.state={c:props.initialCount}; webpack.config.js如下

react组件状态下的变量名称在生产模式下不会被webpack 4更改

我尝试了“uglifyjs网页包插件”:“^2.1.3”,但没有什么不同

比如说,

类计数器扩展React.Component{
建造师(道具){
超级(道具);
this.state={count:props.initialCount};
}
// ...
}
我想在生产中,州名
count
被丑化。 我想是这样的

this.state={c:props.initialCount};
webpack.config.js如下:, //加载包

const path = require('path');
const webpack = require('webpack');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
//定义路径

const STATIC_DIR = path.resolve(__dirname,
    'static',
    'app', 'js');
const SOURCE_DIR = path.resolve(STATIC_DIR, 'src');
//定义条目

    entry: {
        plugin: path.resolve(SOURCE_DIR, 'index.js')
    },
//定义输出

    output: {
        filename: '[name]-2.4.0.js',
        path: STATIC_DIR
    },
这是最重要的部分,

    module: {
        rules: [
            {
                test: /\.jsx?/,
                include: SOURCE_DIR,
                use: {
                    loader: 'babel-loader',
                    options: {
                        // compact: false,
                        // presets: ["es2015", "react"],
                        plugins: ['transform-class-properties']
                    }
                }
            }
        ]
    },
    externals: {
        jquery: 'jQuery'
    }
};

你可以这样设置条件

if (process.env.NODE_ENV === "production") {
    this.state = {c:props.initialCount};     //execute in production time
} else {
    this.state = {count: props.initialCount};
}

不幸的是,我不相信这会发生。丑八怪不知道这个状态是如何使用和使用的。例如,您可以以动态方式对其进行索引:

this.state = {count: 8};
console.log(this.state['c' + 'ount']);  // 8
即使它能够理解这不会在组件中发生,您也可以这样做

somethingElse(this.state);
不管
somethingElse()
是什么,如果它的键被缩小,它可能无法理解
这个.state的头尾

我不建议这样做,但一种迂回的方法是使用字符串变量作为键和——

可能在生产过程中被丑化,例如:

const t = "c";
this.state = {[t]: 8};
console.log(this.state[t]);

请选择网页配置为什么要这样做?这不是一个好主意。这会使一切变得太复杂。是的,但对于上述要求,这一个是合适的。谢谢你的解释和解决方案。您是否同意此.state是本地有效的w.r.t.单个jsx文件或w.r.t.React组件?既然外人不依赖这些名字,为什么它不能被丑化呢?丑化者只是不够聪明,无法推断它在其他地方没有被使用。
const COUNT_KEY = (process.env.NODE_ENV === "production" ? 'c' : 'count');
this.state = {[COUNT_KEY]: 8};
console.log(this.state[COUNT_KEY]);
const t = "c";
this.state = {[t]: 8};
console.log(this.state[t]);