Использование магистрали со сжатыми представлениями через Uglify - PullRequest
0 голосов
/ 03 мая 2018

У меня есть это представление в 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 голосов
/ 03 мая 2018

Минификатор думает, что ViewActivity - локальная переменная, поэтому безопасно сжать присвоенное ему имя. Вы можете обойти это, сказав:

window.ViewActivity = Backbone.View.extend({

Или вы можете определить фабричный метод внутри activity.view.js, чтобы создать его экземпляр:

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