Angular 2ではどのタイプのフォルダー構造を使用する必要がありますか?


129

私はAngular 1の開発者で、Angular 2について学び始めています。トレーニング資料に応じて、さまざまな種類のフォルダー構造メソッドがあります。以下にそれぞれをリストアップします。私は、どちらを使用する必要があるのか​​、そしてその理由について人々の意見を得たいと思います。また、記載されていない方法がある場合でも、動作が良いと思われる場合は、遠慮なく記載してください。

これらすべてを見ると、メソッド#3は、Angular 1アプリの実行方法とほぼ同じです。

方法1:angular2-quickstart

出典:https : //angular.io/guide/quickstart

フォルダー構造:

ここに画像の説明を入力してください

方法2:ng-book2

出典:https : //www.ng-book.com/2/(ファイルを表示するには料金がかかります)

フォルダー構造:

ここに画像の説明を入力してください

方法3:mgechev / angular2-seed

出典:https//github.com/mgechev/angular2-seed

フォルダー構造:

ここに画像の説明を入力してください


1
すべてのコンポーネント、サービスなどは後でファイルを見つけやすくするために別のフォルダーに保存する必要があるため、方法2が最も効率的だと思います。これは、非常に複雑なアプリで最も効率的な方法です。
ブライアン

@Bryanの回答に感謝します。typingsフォルダの理由は何だと思いますか?他の2つの方法はそれを使用しません。また、メインファイルのapp.tsとmain.tsについて意見がありますか?
マリンペトコフ2016

したがって、私が最近使用しているシードは、ここでmethod3であるスタイルガイドに行きました。これがどのようにスケールするのか混乱しています。なぜ共有フォルダがあるのですか?このフレームワークの要点は、コンポーネント/ディレクティブ/パイプ/サービスを誰でも共有できるようにすることではありませんか?ディレクティブ/パイプを簡単に見つける方法を理解するのは難しいです。スタイルガイドの形式では、それがどこにあるかを知る必要があるか、顧客のみに使用したいと思っていた1つのサービスのすべてのフォルダーを確認する必要があります。他のもののためにそれを必要とします。
ゲーリー、

1
@Gary-だから、シーダーの共有フォルダーの私の見解は、共有のすべてのものを同じフォルダーレベルまたは任意のサブフォルダーにあるクラスで使用できるということです。どこでもクラスを使用できますか?もちろん可能ですが、新しい誰かがあなたのコードを見るとき、彼らは何が起こっているのかわかりません。異なるコンポーネント/フォルダー間で使用されるクラスを共有内に配置することで、複数の場所で使用されていることをプログラマーに明確に知らせます。
マリンペトコフ2016年

1
私たちのチームは最近この決定プロセスを実行し、このリソースが非常に有用であることを発見しました:npmjs.com/package/awesome-angular2
theUtherSide

回答:


117

公式ガイドラインは現在あります。mgechev/angular2-seedそれとの整合性もありました。#857を参照してください。

Angular 2アプリケーションの構造

https://angular.io/guide/styleguide#overall-structural-guidelines


3
ドキュメントでフォルダ名の前に「+」記号を付けることをお勧めする場所が見つかりません。どういう意味か思い出せないのですが、何か説明はありますか?
FacundoGFlores 2016年

index.tsファイルの目的は何ですか?ルーティング用ですか?
ニッキー

1
@FacundoGFloresは、コンポーネントが遅延ロードされることを意味します。
charlie_pl 2017年

2
index.tsファイル用@Nicky目的は、各ファイルからインポートする必要がありますが、いない、輸入を簡単にすることであるフォルダから:例のインポート「アプリ/ヒーロー/ヒーロー」から{ヒーロー、剣、盾}のために
charlie_pl

1
上の画像は今では時代遅れです。たとえば、「app」フォルダの親になる「src」フォルダは表示されません。
クリストフ

12

機能ごとにプロジェクトを構成することは、実用的な方法だと思います。これにより、プロジェクトの拡張性と保守性が容易になります。そして、それはプロジェクトの各部分を完全な自治で機能させる。この構造についての感想をお聞かせください: ANGULAR TYPESCRIPTプロジェクトの構造– ANGULAR 2

ソース:http : //www.angulartypescript.com/angular-typescript-project-structure/


11

これを使います。@Marinが示す3番目のものと非常に似ています。

app
|
|___ images
|
|___ fonts
|
|___ css
|
|___ *main.ts*
|   
|___ *main.component.ts*
|
|___ *index.html*
|
|___ components
|   |
|   |___ shared
|   |
|   |___ home
|   |
|   |___ about
|   |
|   |___ product
|
|___ services
|
|___ structures

2
この答えは古いです。mgechev/angular2-seed現在、3つのプロジェクトでgithubから使用しています。すごいね!!!
Savaratkar

ここではSavaratkarの答えが一番ですが、js、css、images、fontsなどが存在するアセットフォルダーを作成することでさらに進んでいきます。
vicgoyso 2017

10

したがって、さらに調査を行った後、方法3のわずかに変更されたバージョン(mgechev / angular2-seed)を使用することになりました。

基本的にコンポーネントをメインレベルのディレクトリに移動し、各機能をその中に配置します。


2

多分この構造のようなもの:

|-- app
     |-- modules
       |-- home
           |-- [+] components
           |-- pages
              |-- home
              |-- home.component.ts|html|scss|spec
           |-- home-routing.module.ts
           |-- home.module.ts
     |-- core
       |-- authentication
           |-- authentication.service.ts|spec.ts
       |-- footer
           |-- footer.component.ts|html|scss|spec.ts
       |-- guards
           |-- auth.guard.ts
           |-- no-auth-guard.ts
           |-- admin-guard.ts 
       |-- http
           |-- user
               |-- user.service.ts|spec.ts
           |-- api.service.ts|spec.ts
       |-- interceptors
           |-- api-prefix.interceptor.ts
           |-- error-handler.interceptor.ts
           |-- http.token.interceptor.ts
       |-- mocks
           |-- user.mock.ts
       |-- services
           |-- srv1.service.ts|spec.ts
           |-- srv2.service.ts|spec.ts
       |-- header
           |-- header.component.ts|html|scss|spec.ts
       |-- core.module.ts
       |-- ensureModuleLoadedOnceGuard.ts
       |-- logger.service.ts
     |-- shared
          |-- components
              |-- loader
                  |-- loader.component.ts|html|scss|spec.ts
          |-- buttons
              |-- favorite-button
                  |-- favorite-button.component.ts|html|scss|spec.ts
              |-- collapse-button
                  |-- collapse-button.component.ts|html|scss|spec.ts
          |-- directives
              |-- auth.directive.ts|spec.ts
          |-- pipes
              |-- capitalize.pipe.ts
              |-- safe.pipe.ts
     |-- configs
         |-- app-settings.config.ts
         |-- dt-norwegian.config.ts
     |-- scss
          |-- [+] partials
          |-- _base.scss
          |-- styles.scss
     |-- assets

0

私は最近ng cliを使用していますが、コードを構造化する良い方法を見つけるのは本当に大変でした。

これまでに見た中で最も効率的なのは、mrholekリポジトリ(https://github.com/mrholek/CoreUI-Angular)です。

このフォルダー構造により、ルートプロジェクトをクリーンに保ち、コンポーネントを構造化できます。これにより、公式のスタイルガイドの冗長な(時には役に立たない)命名規則が回避されます。

また、この構造は、必要なときにインポートをグループ化し、1つのファイルに対して30行のインポートを行わないようにするのに役立ちます。

src
|
|___ app
|
|   |___ components/shared
|   |   |___ header
|   |
|   |___ containers/layout
|   |   |___ layout1
|   |
|   |___ directives
|   |   |___ sidebar
|   |
|   |___ services
|   |   |___ *user.service.ts* 
|   | 
|   |___ guards
|   |   |___ *auth.guard.ts* 
|   |
|   |___ views
|   |   |___ about  
|   |
|   |___ *app.component.ts*
|   |
|   |___ *app.module.ts*
|   |
|   |___ *app.routing.ts*
|
|___ assets
|
|___ environments
|
|___ img
|   
|___ scss
|
|___ *index.html*
|
|___ *main.ts*

0

プロジェクトが小さく、今後も小さい場合は、タイプ別に構造化することをお勧めします(方法2:ng-book2)

app
|- components
|  |- hero
|  |- hero-list
|  |- villain
|  |- ...
|- services
|  |- hero.service.ts
|  |- ...
|- utils
|- shared

プロジェクトが成長する場合は、ドメインごとにフォルダーを構造化する必要があります(方法3:mgechev / angular2-seed)

app
|- heroes
|  |- hero
|  |- hero-list
|  |- hero.service.ts
|- villains
|  |- villain
|  |- ...
|- utils
|- shared

公式ドキュメントをフォローすることをお勧めします。
https://angular.io/guide/styleguide#application-structure-and-ngmodules


0

既存の規約に違反する可能性のある次の構造を提案します。

パス内の名前の冗長性を減らすように努めており、一般的に名前を短くしておくようにしました。

したがって、/ app / components / home / home.component.ts | html | cssはありません。

代わりに次のようになります。

|-- app
    |-- users
        |-- list.ts|html|css
        |-- form.ts|html|css
    |-- cars
        |-- list.ts|html|css
        |-- form.ts|html|css
        |-- configurator.ts|html|css
    |-- app.component.ts|html|css
    |-- app.module.ts
    |-- user.service.ts
    |-- car.service.ts
|-- index.html
|-- main.ts
|-- style.css
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.