Yeomanで生成されたgrunt build
で問題が発生しましたAngularアプリ、CoffeeとSlimを使用し、すべてのライブラリが最新の状態です。(アプリは数日生成されたばかりです以前は最新のジェネレータを使用していました。)
grunt build
とgrunt server
はどちらも最初は問題なく動作していました。しかし、grunt server
を使用した開発の数日後、grunt build
が完全に機能しなくなったことに気付きました。
私が修正したいくつかの異なる問題がありました。最大の問題は、grunt build
が/dist
にパブリッシュされたときにインデックスファイルの80%が不可解に削除されたため、Slimを完全に放棄し、ストレートHTMLを使用する必要があったことです。
残念ながら、ほとんどすべてを解決した後、私のAngularディレクティブの1つでこのエラーが発生し始めました。
不明なエラー:不明なプロバイダー:aProvider <-a
問題は醜いようです。同じ問題が報告された可能性があると思います here ですが、確実ではありません。私はいくつかの解決策を試しましたが、私のために機能したのは、自分のコーヒースクリプトからクリーンな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
があります。)
誰かが何か提案があれば、私はそれを感謝します。
Angularが依存性注入の引数の名前に依存するという一般的な問題のようです。 Angularは、圧縮後に何を注入するかがわかるように、依存関係の名前を文字列として含む依存関係を渡すとき(文字列の値は縮小プロセスで変更されないため)。
myApp.controller('myCtrl', ['$scope', '$http', function($scope, $http) {
}])
From Angular docs:minificationに関する注意