Не могу найти переменную после минимизации JavaScript - PullRequest
0 голосов
/ 18 июня 2019

У меня есть веб-приложение AngularJS. Приложение прекрасно работает без минификации. Но когда я уменьшился с ворчанием, вот так:

uglify: {
        options: {
                report: 'min',
                mangle: false
        },
        dist: {
            files: {'app/dist/js/yanpy.min.js': [Many scripts, 'app/js/controllers/shopping-cart.js', more scripts]

Я получаю следующую ошибку:

ReferenceError: shoppingCart is not defined
    at Object.$get (yanpy.min.js:9)
    at Object.invoke (yanpy-libs-1.min.js:1)
    at yanpy-libs-1.min.js:1
    at getService (yanpy-libs-1.min.js:1)
    at invoke (yanpy-libs-1.min.js:1)
    at Object.instantiate (yanpy-libs-1.min.js:1)
    at yanpy-libs-1.min.js:2
    at yanpy-libs-1.min.js:2
    at forEach (yanpy-libs-1.min.js:1)
    at nodeLinkFn (yanpy-libs-1.min.js:2)

Скрипт shoppingCart "shopping-cart.js" включен в файл grunt для минимизации. Файл выглядит так:

function shoppingCart(cartName) {
    this.cartName = cartName;
    this.clearCart = false;
    this.checkoutParameters = {};
    this.items = [];

    // load items from local storage when initializing
    this.loadItems();           
}

// load items from local storage
shoppingCart.prototype.loadItems = function () {

   // Do whatever
}

Что происходит? И почему не работает, когда я минифицирован, и работает без минификации?

UPDATE_1: В соответствии с пометкой как дубликат, обратите внимание, что корзина для покупок - это не угловой модуль, а сценарий javascript. Так что не уверен, что подход, предоставленный в исходном ссылочном сообщении, является реальным ответом.

UPDATE_2: согласно комментарию @UncleDave. Я копирую две части кода, на которые ссылается shoppingCart.

.directive('adminOfferExtras', function(Extra, ExtraService, LocationService, OfferService, DataService) {        

    function link(scope, element, attrs) { 

        var boatId = parseInt(scope.boat.id);
        var extrasCart = new shoppingCart("OfferBoatExtrasCart_" + boatId);

и

.factory("DataService", function () {

    // create shopping cart
    var myCart = new shoppingCart("Store");    
    return {
        cart: myCart
    };
})

Обратите внимание, что единственное место, где я вижу ссылку на ShoppingCart, находится в файле shopping-cart.js, который я уже скопировал. Может быть, этот вызов должен быть отмечен с помощью var?

shoppingCart.prototype.loadItems = function () {

   // Do whatever
}
...