通过Uglify

时间:2018-05-02 21:48:16

标签: javascript backbone.js webpack uglifyjs

我在activity.view.js中有这个观点:

var ViewActivity = Backbone.View.extend({
    el: '#Activity',

    events:{
        'change #grade': 'gradeChanged'
    },

    initialize: function(params){
        _.bindAll(this, 'gradeChanged', 'render');
        this.model = new MyModel(params)
        this.render();
    },

    gradeChanged: function(){
    },

    render: function(){
    }
});

在HTML中,我将视图称为:

<script>
var view = new ViewActivity({
    foo: 'bar'
}); 
</script>

在这里,一切都没有问题。当我尝试使用webpack的插件UglifyJS来压缩所有javascript时,问题就来了。压缩activity.view.js后,由于压缩代码,ViewActivity对象无法像我一样实例化:

!function(r){var n={};function e(t){if(n[t])return ..
  

浏览器控制台:ViewActivity未定义

压缩代码时如何使用ViewActivity?提前致谢

我忘了提到我使用了以下配置,但压缩代码保持不变:

plugins: [
    new UglifyJsPlugin({
        uglifyOptions: {
            keep_classnames: true,
            keep_fnames: true,
            mangle: {
                reserved: ["VistaPago"]
            }
        }
    })
]

1 个答案:

答案 0 :(得分:1)

minifier认为ViewActivity是一个局部变量,因此压缩其指定名称是安全的。您可以通过以下方式解决这个问题:

window.ViewActivity = Backbone.View.extend({

或者您可以在activity.view.js中定义工厂方法来实例化它:

window.createActivityView(foo) {
    return new ViewActivity({
                             bar: foo
    });
}