2016-03-12 3 views
8

Может ли кто-нибудь показать пример того, что действительно делает gulp-angular-filesort и как его правильно использовать?Какой gulp-angular-filesort действительно подходит для инъекций с глотками?

Дело в том, что я недавно понял, что мой Глоток-угловой FileSort не сортирует angularjs файлы на всех, однако мой AngularJS App с большим количеством файлов, работает отлично. Итак, у меня есть два вопроса:

  1. Является ли AngualarJs по-прежнему чувствительным к заказу исходных файлов? Что касается меня, похоже, это не так.
  2. На самом деле, что такое gulp-angular-filesort? Я не вижу никаких результатов своей работы.

Я думал, что gulp-angular-filesort смотрит на выражения angular.module и сортирует файлы в соответствии с указанной зависимостью в скобках. Похоже, я был неправ.

Пожалуйста, посмотрите на мой образец ниже.

// Файл: Gulpfile.js

'use strict'; 

var 
    gulp = require('gulp'), 
    connect = require('gulp-connect'), 
    angularFilesort = require('gulp-angular-filesort'), 
    inject = require('gulp-inject'); 


gulp.task('default', function() { 

    gulp.src('app/index.html') 
     .pipe(inject(
      gulp.src(['app/js/**/*.js']).pipe(angularFilesort()), 
      { 
       addRootSlash: false, 
       ignorePath: 'app' 
      } 
     )) 
     .pipe(gulp.dest('app')) 
    ; 

    connect.server({ 
     root: 'app', 
     port: 8081, 
     livereload: true 
    }); 

}); 

//a_services.js

'use strict'; 

angular.module('myServices', []) 
    .factory('MyService', function() { 
     return { 
      myVar:1 
     }; 
    }) 
; 

//b_controllers.js

'use strict'; 

angular.module('myControllers', ['myServices']) 
    .controller('MyController', function ($scope, MyService) { 
     $scope.myVar = MyService.myVar; 
    }) 
; 

// c_app.js

'use strict'; 

angular.module('myApp', ['myControllers']); 

Результат Глоток-Inject заключается в следующем:

<!-- inject:js --> 
<script src="js/c_app.js"></script> 
<script src="js/b_controllers.js"></script> 
<script src="js/a_services.js"></script> 
<!-- endinject --> 

я ожидал совсем противоположный для того, чтобы сделать работу приложения (однако она по-прежнему делает работу). Итак, использование gulp-angular-filesort просто отсортированных файлов в алфавитном порядке, несмотря на все зависимости, указанные в angular.module (..., [...])

Что здесь происходит?

+1

Я никогда не понимаю людей, которые downvote вопрос без каких-либо комментариев. – zhekaus

ответ

11

Фактически в вашем случае вам не нужен gulp-angular-filesort, потому что вы объявляете модуль для каждого файла. Механизм впрыска зависимостей для углового будет определять правильный способ вызова ваших модулей в соответствии с вашими зависимостями.

Вам понадобится gulp-angular-filesort, только если у вас есть один модуль, который распространяется на несколько файлов. Итак, для вашего примера, если все файлы используют «myApp» в качестве имени модуля. Затем плагин будет сортировать файлы правильно: всегда один с зависимостями перед другими.

Вот ваш пример модифицирована таким образом, что gulp-angular-filesort необходимо:

//a_services.js

'use strict'; 

angular.module('myApp') 
    .factory('MyService', function() { 
     return { 
      myVar:1 
     }; 
    }) 
; 

//b_controllers.js

'use strict'; 

angular.module('myApp') 
    .controller('MyController', function ($scope, MyService) { 
     $scope.myVar = MyService.myVar; 
    }) 
; 

// c_app.JS

'use strict'; 

angular.module('myApp', []); 

В данном случае это все еще будет:

  1. c_app.js
  2. b_controller.js
  3. a_service.js
+0

Следовательно, gulp-angular-filesort делает единственное: он перемещает декларацию модуля над файлами, в которых указан модуль. Не большая работа.)) Огромное спасибо! У меня это наконец. – zhekaus

4

глотка-угловой-FileSort перемещает файлы, содержащие объявление модуля над файлами, в которых упомянуты модули.

Если модуль упоминается, прежде чем он объявил, вы получили ошибки, подобные этим:

  • «angular.js: 68 Uncaught Ошибка: [$ Инжектор: nomod] модуль 'MYAPP' не доступен Вы либо ошибочно написали имя модуля, либо забыли его загрузить. Если регистрация модуля гарантирует, что вы укажете зависимости в качестве второго аргумента ».

  • "angular.js: 13294 Ошибка: [нг: areq] Аргумент 'MyController' не функция, получил неопределенный"

+0

Я никогда не понимаю, почему люди не принимают правильные ответы и вместо этого сами пишут. – koe

+0

мин намного короче и точнее – zhekaus

Смежные вопросы