[javascript] Angularjs는 모범 사례 축소

나는 http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs-dependency-injection.html을 읽고 있는데 자바 스크립트를 축소하면 angularjs 종속성 주입에 문제가 있음이 밝혀졌습니다. 대신에 궁금하다

var MyController = function($scope, $http) {
    $http.get('https://api.github.com/repos/angular/angular.js/commits')
      .then(function(response) {
        $scope.commits = response.data
      })
  }

당신은 사용해야합니다

var MyController = ['$scope', '$http', function($scope, $http) {
  $http.get('https://api.github.com/repos/angular/angular.js/commits')
    .then(function(response) {
      $scope.commits = response.data
    })
}]

대체로 두 번째 스 니펫은 이전 버전의 angularjs 용이라고 생각했지만 ….

항상 주입 방법 (두 번째 방법)을 사용해야합니까?



답변

, 항상! 따라서 미니 퍼가 $ scope를 변수 a로, $ http를 변수 b로 변환하더라도 해당 ID는 여전히 문자열에 유지 됩니다.

AngularJS 문서 의이 페이지 를 참조 하고 A Note on Minification으로 스크롤 하십시오 .

최신 정보

또는 빌드 프로세스에서 ng-annotate npm 패키지를 사용 하여이 자세한 정보를 피할 수 있습니다.


답변

두 번째 변형을 사용하는 것이 더 안전하지만 ngmin 과 함께 첫 번째 변형을 안전하게 사용할 수도 있습니다 .

업데이트 :
이제 ng-annotate 가이 문제를 해결하는 새로운 기본 도구가됩니다.


답변

예, 명시 적 종속성 주입 (두 번째 변형) 을 사용해야 합니다. 그러나 Angular 1.3.1 부터는 암시 적 종속성 주입 을 끌 수 있으므로 이름 바꾸기와 관련된 잠재적 인 문제를 한 번에 해결하는 것이 정말 유용합니다 (최소화 전).

strictDiconfig 속성을 사용하여 암시 적 DI 끄기 :

angular.bootstrap(document, ['myApp'], {
    strictDi: true
});

ng-strict-di지시문을 사용하여 암시 적 DI 끄기 :

<html ng-app="myApp" ng-strict-di>


답변

만약 당신이 사용한다면

자작농

좋아할 필요가 없습니다

var MyController = ['$scope', '$http', function($scope, $http) {
  $http.get('https://api.github.com/repos/angular/angular.js/commits')
    .then(function(response) {
      $scope.commits = response.data
    })
}]

축소하는 동안 grunt는 DI 관리 방법을 고려하기 때문입니다.


답변

OZ_가 말했듯이, ngmin을 사용하여 directive.js service.js와 같은 모든 각도 js 파일을 축소하십시오. 그 후 클로저 컴파일러를 사용하여 최적화 할 수 있습니다.

심판 :

angularjs 스크립트를 축소하는 방법

YO로 구축


답변

여기에$inject 언급 된대로 사용할 수 있습니다 .

MyController.$inject = ['$scope', '$http'];

function MyController($scope, $http) {
  $http.get('https://api.github.com/repos/angular/angular.js/commits')
    .then(function(response) {
      $scope.commits = response.data
    })
}


답변

Strict Dependency Injection을 사용하여 문제 진단

Implicit Annotation을 사용 하면 축소 될 때 코드가 중단됩니다.

문서에서 :

암시 적 주석

주의 : 코드를 축소하려는 경우 서비스 이름이 변경되고 앱이 손상됩니다.

엄격한 DI 모드로 옵트 인하 ng-strict-di는 것과 동일한 요소에 지시문을 추가 할 수 있습니다 ng-app.

<body ng-app="myApp" ng-strict-di>

Strict 모드는 서비스가 암시 적 주석을 사용하려고 할 때마다 오류를 발생시킵니다.

이것은 문제를 찾는 데 유용 할 수 있습니다.

자세한 내용은