首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Webpack4在生产模式下,不会丑化React.Component状态下的变量名吗?

Webpack4在生产模式下,不会丑化React.Component状态下的变量名吗?
EN

Stack Overflow用户
提问于 2019-06-27 17:04:37
回答 2查看 304关注 0票数 1

在生产模式下,处于react组件状态的变量名称不会由webpack 4更改。

我尝试了"uglifyjs-webpack-plugin":"^2.1.3",但没有什么不同。

例如,

代码语言:javascript
复制
class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {count: props.initialCount};
  }
  // ...
}

我想在生产中,州名count被提升了。我希望是这样的,

代码语言:javascript
复制
this.state = {c:props.initialCount};

webpack.config.js如下,//加载包

代码语言:javascript
复制
const path = require('path');
const webpack = require('webpack');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

//定义路径

代码语言:javascript
复制
const STATIC_DIR = path.resolve(__dirname,
    'static',
    'app', 'js');
const SOURCE_DIR = path.resolve(STATIC_DIR, 'src');
代码语言:javascript
复制
module.exports = {
    mode: "production",
    devtool: 'source-map',

//定义条目

代码语言:javascript
复制
    entry: {
        plugin: path.resolve(SOURCE_DIR, 'index.js')
    },

//定义输出

代码语言:javascript
复制
    output: {
        filename: '[name]-2.4.0.js',
        path: STATIC_DIR
    },

这里是重要的部分,

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-27 17:40:40

不幸的是,我不相信这会发生。丑化器不能知道this.state是如何使用的。例如,您可以以动态方式对其进行索引:

代码语言:javascript
复制
this.state = {count: 8};
console.log(this.state['c' + 'ount']);  // 8

即使它可以理解在组件中不会发生这种情况,您也可以这样做

代码语言:javascript
复制
somethingElse(this.state);

无论somethingElse()是什么,如果它的键被缩小,它可能无法理解this.state

我不推荐这样做,但一种间接的方法是使用键和computed property names的字符串变量-

代码语言:javascript
复制
const COUNT_KEY = (process.env.NODE_ENV === "production" ? 'c' : 'count');
this.state = {[COUNT_KEY]: 8};
console.log(this.state[COUNT_KEY]);

在生产中,它可能会被丑化成这样:

代码语言:javascript
复制
const t = "c";
this.state = {[t]: 8};
console.log(this.state[t]);
票数 1
EN

Stack Overflow用户

发布于 2019-06-27 17:18:42

你可以像这样设置条件

代码语言:javascript
复制
if (process.env.NODE_ENV === "production") {
    this.state = {c:props.initialCount};     //execute in production time
} else {
    this.state = {count: props.initialCount};
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56787583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档