gulp-angular-filesort 对 gulp-inject 的真正作用是什么?
What gulp-angular-filesort really does for gulp-inject?
谁能举例说明 gulp-angular-filesort 的真正作用以及如何正确使用它?
问题是我最近意识到我的 gulp-angular-filesort 没有排序 angularjs 个文件,但是我的 AngularJS 包含大量文件的应用程序运行良好。
所以,我想出了两个问题:
- AngualarJs 是否仍然对源文件顺序敏感?在我看来,好像不是。
- 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']);
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 -->
我被期望以完全相反的顺序使应用程序正常工作(但它仍然有效)。
因此,尽管 angular.module(...,[...])[=18= 中指定了所有依赖项,但使用 gulp-angular-filesort 只是按字母顺序对文件进行排序]
这是怎么回事?
实际上在你的情况下你不需要 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', []);
在这种情况下,这仍然是:
- c_app.js
- b_controller.js
- a_service.js
gulp-angular-filesort 将包含模块声明的文件移动到提到模块的文件之上。
如果模块在声明之前被提及,你会得到如下错误:
"angular.js:68 Uncaught Error: [$injector:nomod] Module 'myApp' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument."
"angular.js:13294 Error: [ng:areq] Argument 'MyController' is not a function, got undefined"
谁能举例说明 gulp-angular-filesort 的真正作用以及如何正确使用它?
问题是我最近意识到我的 gulp-angular-filesort 没有排序 angularjs 个文件,但是我的 AngularJS 包含大量文件的应用程序运行良好。 所以,我想出了两个问题:
- AngualarJs 是否仍然对源文件顺序敏感?在我看来,好像不是。
- 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']);
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 -->
我被期望以完全相反的顺序使应用程序正常工作(但它仍然有效)。 因此,尽管 angular.module(...,[...])[=18= 中指定了所有依赖项,但使用 gulp-angular-filesort 只是按字母顺序对文件进行排序]
这是怎么回事?
实际上在你的情况下你不需要 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', []);
在这种情况下,这仍然是:
- c_app.js
- b_controller.js
- a_service.js
gulp-angular-filesort 将包含模块声明的文件移动到提到模块的文件之上。
如果模块在声明之前被提及,你会得到如下错误:
"angular.js:68 Uncaught Error: [$injector:nomod] Module 'myApp' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument."
"angular.js:13294 Error: [ng:areq] Argument 'MyController' is not a function, got undefined"