@MOTORIST

Yii2 сжатие и объединение js и css файлов. Как сжимать пакетами (jquery отдельно, angular отдельно)?

Всем привет!
Сжимаю css и js файлы Closure Compiler, YUI Compressor. Все сжимается в один фаил js и css. В итоге получаю ошибку от angular:
Error: $injector:unpr
Unknown Provider
Unknown provider: bProvider <- b

Хочу отдельно сжать jquery, angular и другие скрипты чтобы выявить ошибку (три js на выходе).
Целый день над этим бьюсь никак не могу сделать. Буду благодарен за помощь.

Compressor:
// In the console environment, some path aliases may not exist. Please define these:
 Yii::setAlias('@webroot', __DIR__.'/../web' );
 Yii::setAlias('@web', '/');

return [
    // Adjust command/callback for JavaScript files compressing:
    'jsCompressor' => 'java -jar compiler.jar --js {from} --js_output_file {to}',
    // Adjust command/callback for CSS files compressing:
    'cssCompressor' => 'java -jar yuicompressor.jar --type css {from} -o {to}',
    // The list of asset bundles to compress:
    'bundles' => [
         'yii\web\JqueryAsset',
         'frontend\assets\AppAsset',
         'yii\web\YiiAsset',
    ],
    // Asset bundle for compression output:
    'targets' => [
        'all' => [
            'class' => 'yii\web\AssetBundle',
            'basePath' => '@webroot',
            'baseUrl' => '@web',
            'js' => 'js/all-{hash}.js',
            'css' => 'css/all-{hash}.css',
        ],

    ],
    // Asset manager configuration:
    'assetManager' => [
        'basePath' => '@webroot/assets',
        'baseUrl' => '@web',
    ],
];


class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = [
//        'css/site.css',

//        'http://fonts.googleapis.com/css?family=Source+Sans+Pro:400,700|Open+Sans:300italic,400,300,700',
        'libs/semantic/semantic.min.css',
        'libs/notification/toaster.css',
        'libs/angular-loading-bar/loading-bar.min.css',
        'libs/angular-datepicker/angular-datepicker.min.css'
    ];
    public $depends = [
        'yii\web\YiiAsset',
//        'yii\bootstrap\BootstrapAsset',
    ];
    public $js = [
//        'http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js',
        'libs/semantic/semantic.min.js',
        'js/masonry.pkgd.min.js',
        'libs/angular-1.3.8/angular.min.js',
        //'angular-1.3.8/angular-cookies.min.js',
        'libs/angular-1.3.8/i18n/angular-locale_ru.js',
        'libs/angular-1.3.8/angular-route.min.js',
        'libs/angular-1.3.8/angular-animate.min.js',
        'libs/notification/toaster.js',
        'libs/angular-loading-bar/loading-bar.min.js',
        'js/angular-masonry.js',
        'libs/angular-semantic-ui/checkbox/checkbox.js',
        'libs/angular-plupload/plupload.full.min.js',
        'libs/angular-plupload/plupload-angular-directive.min.js',
        'libs/angular-datepicker/angular-datepicker.min.js',
        'app.js',
        'modules/auth/controllers/authController.js',
        'modules/photos/controllers/albumsController.js',
        'modules/photos/controllers/photoController.js',
        'libs/zoomscript/jquery.rotator.js',
        'libs/zoomscript/jquery.common.js',
        'libs/zoomscript/jquery.zoomscript.min.js',
        'libs/zoomscript/translations.js'
    ];
}
  • Вопрос задан
  • 2840 просмотров
Решения вопроса 1
miraage
@miraage
dev
Стоп, стоп, стоп!
Я уверен на 99.999999999%, что проблема в аннотациях.
https://docs.angularjs.org/guide/di

Так нельзя!:
function MyCtrl($scope, MyService) {
  $scope.data = MyService.getData();
}
angular.module('myapp').controller('MyCtrl', MyCtrl);


Только так:
MyCtrl.$inject = ['$scope', 'MyService'];
function MyCtrl($scope, MyService) {
  $scope.data = MyService.getData();
}
angular.module('myapp').controller('MyCtrl', MyCtrl);


Либо так:
function MyCtrl($scope, MyService) {
  $scope.data = MyService.getData();
}
angular.module('myapp')
    .controller('MyCtrl', ['$scope', 'MyService', MyCtrl]);


/ / UPD

ВНИМАТЕЛЬНО ПРОЧИТАЙТЕ МОЙ ОТВЕТ! В нем все описано.

Вместе с ng-app="myapp" допишите ng-strict-di, и без компрессии посмотрите, где ругается.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MOTORIST Автор вопроса
Поправил некоторые моменты в коде и заработало (примеры ниже).
Не правильно:
.directive('popup',function(){
        return function(scope, element){
            element.popup();
        }
    })


Правильно:
.directive('popup',[function(){
        return function(scope, element){
            element.popup();
        }
    }])


Не правильно:
app.service('rest',function($http, $location, $routeParams) {
.....................


Правильно:
app.service('rest',['$http', '$location', '$routeParams',function($http, $location, $routeParams) {
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы