我正在尝试将JSHint合并到我的构建过程中。我正在构建的应用程序使用AngularJS。目前,我有一个冲突,我不知道如何解决。当我构建我的应用程序时,我收到一个JSHint错误:
src\app\app.js
3 |var myApp = angular.module('myApp', []);
^ Redefinition of 'myApp'.
>> 1 error in 2 files
Warning: Task "jshint:source" failed. Use --force to continue.
我收到此错误,因为在我的.jshintrc文件中,我有以下内容:
“predef”:[“angular”,“myApp”],
如果我删除“myApp”,我会收到一个不同的错误:
src\app\account\welcome.html.js
3 |myApp.controller('WelcomeController', ['$scope', function($scope) {
^ 'myApp' is not defined.
1 error in 2 files
我定义这样的控制器的原因是因为根据AngularJS documentation,您不应该在全局范围内定义控制器。正如你所看到的,如果我这样做,就像我该死的那样,如果我不这样做,那该死的。在构建过程中仍然包含JSHint时,如何遵循AngularJS最佳建议?
谢谢!
答案 0 :(得分:10)
我认为您可以使用.jshintrc文件中的全局键修复此问题
{
"node": true,
"browser": true,
"esnext": true,
"bitwise": true,
"camelcase": true,
"curly": true,
"eqeqeq": true,
"immed": true,
"indent": 4,
"latedef": true,
"newcap": true,
"noarg": true,
"quotmark": "single",
"undef": true,
"unused": true,
"strict": true,
"trailing": true,
"smarttabs": true,
"multistr": true,
"globals": {
"myApp": false
}
}
答案 1 :(得分:3)
为什么要定义myApp
变量?我用这种方式定义我的应用程序,控制器等。您可以链接多个控制器,工厂等:
angular.module('myApp',[])
.controller("MainCtrl", function($scope) {
$scope.person = {
nfname: 'John',
lname: 'Deighan',
email: 'john.deighan@gmail.com',
};
});
答案 2 :(得分:3)
最后给出的示例很好,但如上所述,如果使用空数组作为第二个参数调用.module(),则将重新定义模块依赖项。 为避免这种情况,只将模块名称传递给.module()
angular.module('myApp')
.controller("MainCtrl", function($scope) {
$scope.person = {
nfname: 'John',
lname: 'Deighan',
email: 'john.deighan@gmail.com',
};
});
答案 3 :(得分:2)
因为您在myApp
文件中将.jshintrc
设置为predef,所以jshint认为已在此项目目录的所有文件中定义myApp
。因此,当您定义myApp
时,错误重新定义。
因为相同文件中没有myApp
的定义。我想你在app.js
文件中定义它。正如您所注意到的,在Angularjs文档中,他们的控制器都是在myApp
之后定义的,它们位于相同的文件中。
在myApp
中不需要将.jshint
设置为predef或global,我建议您在定义控制器或配置时,执行以下操作:
angular.module('myApp')
.controller('myController',