我在使用Coffee和Slim的Yeoman生成的Angular应用程序中遇到grunt build
问题,所有库都是最新的。 (该应用程序是几天前使用最新的生成器生成的。)
grunt build
和grunt server
最初都运作良好。但在使用grunt server
开发几天后,我发现grunt build
已完全停止工作。
我修复了一些不同的问题。最大的一点就是我不得不完全放弃Slim用于我的索引文件并使用直接HTML,因为grunt build
在发布到/dist
时无法删除80%的索引文件。
不幸的是,在我几乎解决了所有问题后,我开始在我的一个Angular指令中收到此错误:
未捕获错误:未知提供商:aProvider< - a
问题似乎在于uglify。我认为这可能是报告here的同一问题,但我并不完全确定。我尝试了很多解决方案,但唯一对我有用的是从我的coffeescript手动生成干净的js文件,将文件复制到/dist
,然后将路径写入dist/index.html
显然这不是最佳的。我确信在Grunt中有一个更简洁的方法(可能完全从构建过程中删除缩小,就像其他用户在上面的链接中所做的那样),但我是新手并且尚未弄清楚如何要做到这一点。无论哪种方式,这都是一种解决方法。
我的Gruntfile非常基本:我只在默认文件中添加了grunt-connect-proxy,grunt-contrib-sass和grunt-slim。事实上,我试图引入一个干净的,新生成的Gruntfile,但它没有更好的构建。
失败的指令如下。该错误实际上出现在控制器的第一行$scope.showInput = false
中。令人沮丧的是,grunt server
中的一切都很有效。我建立的那一刻,它完全崩溃了。
myModule.directive "editable", ->
controller = ($scope) ->
$scope.showInput = false
$scope.saveContent = ->
$scope.toggleContent()
$scope.save()
linker = (scope, element, attrs) ->
scope.toggleContent = ->
scope.showInput = not scope.showInput
setTimeout((-> element.find('input').focus()), 100)
return DDO =
restrict: 'E'
controller: controller
link: linker
templateUrl: "template/editable.html"
scope:
editableType: "@"
text: "="
placeholder: "@"
save: "&"
(模板并不重要。它只有一个ng-switch
可以使用$scope.showInput
进行切换。)
如果有人有任何建议,我会很感激。
答案 0 :(得分:46)
这听起来像是Angular依赖于依赖注入参数名称的常见问题。确保在传递依赖项时将依赖项名称包含为字符串,以便Angular在缩小后知道要注入的内容(因为在缩小过程中不会更改字符串值)。
myApp.controller('myCtrl', ['$scope', '$http', function($scope, $http) {
}])
来自Angular docs: A Note on minification