gulp-angular-filesort真正为gulp-inject做了什么?

时间:2016-03-12 18:45:10

标签: angularjs gulp-inject

有人能举例说明gulp-angular-filesort真正做了什么以及如何正确使用它?

问题是我最近意识到我的 gulp-angular-filesort 根本没有对 angularjs 文件进行排序,但是我的AngularJS应用程序包含大量文件工作良好。 所以,我提出了两个问题:

  1. AngualarJs仍然对源文件顺序敏感吗?至于我,它看起来不是。
  2. gulp-angular-filesort实际上做了什么?我看不到其工作的任何结果。
  3. 我认为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']);
    

    gulp-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 -->
    

    我期望完全相反的顺序使App工作(但它仍然有效)。 因此,使用gulp-angular-filesort只是按字母顺序对文件进行排序,尽管angular.module中指定了所有依赖项(...,[...])

    这里发生了什么?

2 个答案:

答案 0 :(得分:11)

实际上,在您的情况下,您不需要gulp-angular-filesort,因为您为每个文件声明了一个模块。 angular的依赖注入机制将根据你的依赖关系确定调用模块的正确方法。

只有当一个模块分布在多个文件中时,才需要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

答案 1 :(得分:4)

gulp-angular-filesort 将包含模块声明的文件移到提到模块的文件上方。

如果在声明模块之前提到模块,则会出现以下错误:

  • &#34; angular.js:68未捕捉错误:[$ injector:nomod]模块&#39; myApp&#39;不可用!您要么错误拼写了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。&#34;

  • &#34; angular.js:13294错误:[ng:areq]参数&#39; MyController&#39;不是一个功能,未定义&#34;