2014-04-26 4 views
1

GWT에서 AngularJS로 왔습니다.이 전환 작업에 만족합니다. 새로운 프로젝트를 시작하고 Angular 및 JS 개발에서 어떤 프로젝트 구조 및 종속성 관리가 가장 좋은 것인지 파악했습니다.프로젝트 구조 및 파일 종속성

주위를 걷고 난 후에 네비게이션과 네 스티드 뷰가 있고 또한 파일 종속성에 가장 적합한 후보가 RequireJS 인 것으로 나타났습니다 ($ stateProvider).

appConfig.js :

myModule.lazy = { 
    controller: $controllerProvider.register, 
    directive: $compileProvider.directive, 
    filter: $filterProvider.register, 
    factory: $provide.factory, 
    service: $provide.service, 
    animation: $animateProvider.register 
}; 

for (var i = 0; i < states.length; i++) { 
    $stateProvider.state(states[i]); 
} 

국가가 별도의 파일에 정의되어 있습니다 :

var states= 
[ 
{ 
    name: 'landingPage', 
    url: '/', 
    templateUrl: 'partials/landingPage/landingPage.html', 
    resolve:{load:function($q, $i18n){ 
     return resolver ($q,$i18n,['landingPage','general'], 
      [ 
       'partials/landingPage/landingPageController.js', 
       'partials/landingPage/landingPageService.js' 
      ]); 
    } 
    } 
}, 
{ 
    name: 'a', 
    templateUrl: 'partials/application/application.html', 
    resolve:{load:function($q, $i18n){ 
     return resolver ($q,$i18n,'', 
      [ 
       'partials/application/applicationController.js', 
       'partials/application/applicationService.js' 

      ]); 
    } 
    } 
}, 

{ 
    name: 'a.defaultDash', 
    url: '/defaultDash', 
    templateUrl: 'partials/dashBoards/defaultDash/defaultDash.html', 
    resolve:{load:function($q, $i18n){ 
     return resolver ($q,$i18n,[], 
      [ 
       'partials/dashBoards/defaultDash/defaultDashController.js', 
       'partials/dashBoards/defaultDash/defaultDashService.js', 

      ]); 
    } 
    } 
}]; 

그래서 나는 주에서 나의 정의를 기반으로 JS 게으른 로딩이 그래서 이런 내 프로젝트를 구성. (첫 번째 질문은 이것이 가장 좋은 방법일까요?)

다음 단계는 내 지시어를 개발하고 있습니다. 오 ... 내 응용 프로그램에서 50 개 이상의 지시어가 될 것입니다. 그들 중 일부는 매우 복잡하고 특정 페이지에서 한 번 사용되기 때문에 일반적인 지시문이 아니라고 말할 수 있습니다.이 경우 지시어 템플리트에 별도의 HTML을 사용하여 코드를 별도의 js 파일에 넣고 관련 상태이므로 상태 (상위보기)가 요청 될 때 지시문 파일이로드됩니다.

하지만 내 일반 지침은 어떻게됩니까? 각각에 대해 js/html 파일을 분리하는 것은 의미가 없으므로 모든 코드를 단일 js 파일에 넣고 index.html에 스크립트 링크를 넣습니다. 내 문제는 단일 파일을 유지 보수하는 것이 어렵고 Angular js에서 대규모 프로젝트를 실행하기위한 최선의 방법인지 확인하고 싶습니다. 내가 언급 한 것처럼 완전한 OO 개념, 인터페이스, 상속 및 파일 분리로 GWT (Full java env)에서 왔습니다.

감사, 일반 지침의 라이브러리의

답변

1

, 나는 별도의 프로젝트 디렉토리에 수용하는 것을 선호합니다. 각 지시문은 자체 .js 파일 (및 해당되는 경우 .html 템플릿)에 있으며, grunt을 사용하여 소스 파일을 하나로 병합합니다. 이렇게하면 지시문 라이브러리를 유지하는 데 따르는 고통이 줄어들고 라이브러리를 기본 프로젝트에 쉽게 포함시킬 수 있습니다.

이 방법을 사용하는 경우 HTML 템플릿을 하나의 .js 파일로 병합 할 수 있도록 grunt-angular-templates, "자동으로 HTML 템플릿을 $ templateCache로 축소, 결합 및 자동 캐싱"하는 grunt 플러그인을 사용하는 것이 좋습니다. 이 파일은 grunt-contrib-concat을 사용하여 다른 모든 .js 파일과 연결할 수 있습니다.

0

프로젝트에 각도 응용 프로그램 프로젝트 (https://github.com/angular-app/angular-app)를 모델링 할 수 있습니다. 좋은 프로젝트 구조 및 코딩 표준으로 프로젝트에 도움이 될 것입니다.

3

당신은 말 앞에서 마차를 걸고 있을지도 모릅니다. 지금 앱을 분리해야하나요? 이 시점에서 현재 성능에 영향을 줍니까? 귀하의 대답은 아니오이며 결과를 얻는 데 집중하는 대신 솔루션을 설계하려고합니다. 즉, 만약 당신이 이것을해야만했다면, 그것은 각도적인 일 (관심의 분리 등) 때문에 미래에 이루어질 수 있습니다.

기본적으로 Angular는 '모듈'을 잘 처리하지 않습니다. I did try out a project a while ago on github for modules which worked okay하지만 위대하지는 않습니다 (당시에는 변경 될 수 있음). 백본 프로젝트에서 왔을 때, 나는 당신과 똑같이하려고 노력했습니다. RequireJS를 사용하여 AMD를 수행합니다.결국, 매우 큰 프로젝트에서도, 우리는 결코 그 중 하나를 사용하지 않아도됩니다. ng-boilerplate 프로젝트를 사용하여 우리는 끔찍한 연결을 가지고 모든 자바 스크립트를 축소했습니다. 최종 결과는 약 500kb의 웹 응용 프로그램 크기 (글꼴 및 아이콘 포함)였습니다.

'모듈러'앵귤러 프로젝트를 실제로 만들고 싶다면 언제든지 그것을 다른 앱으로 분리 할 수 ​​있습니다 (예 : 다른 기능/페이지는 다른 앱이 될 수 있음). 해결 방법을 사용하는 당신의 방식은 (템플릿을 만들기 전에 데이터를로드하는) 해결 방법이 아닙니다. 나는 이것을 정확하게 시도했지만, 결국 계획에 렌치를 넣는 결국 종속성에 문제가 있음을 발견했다.

TLDR; 너무 빨리 최적화. RequireJS없이 ​​Angular로 먼저 작업 해보십시오. 나중에 AMD를 추가 할 수 있습니다.

+1

+1이 이에 해당합니다. 또한 그들은 Angular 2.0에서 기본적으로 모듈의 지연로드를 포함 할 계획입니다 – Beyers

1

탐색 용도로 모든 프로젝트에서 이것을 사용합니다. https://github.com/ajoslin/angular-mobile-nav 또한 내비게이션 효과가 있습니다. 슬라이드 및 모달 프레젠테이션. 또한 자체적으로 역사를 관리합니다.

관련 문제