У меня есть веб-приложение 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
}