File Organization - HealthTeacher/style-guide GitHub Wiki

Guidelines

  • All files should be placed in a generic directory. The only exceptions are the app's entry point (i.e. the top-level index.js) and nested components.
  • Do not nest directories outside of the components directory.
  • Within the components directory...
    • Do not nest more than 3 levels.
    • Use a generic images directory to group image assets.
    • Use a generic shared directory to group shared components.
    • Do not nest shared directories within other shared directories.
  • File/directory names should follow one of the following patterns.
    • MyClassName: Pascal case for components and constructors.
    • myUtilityName: Camel case for utilities and side-effects.
    • my-asset-name: Kebab case for assets.
  • If a component requires multiple file types, each file should be named index.
    • MyClassName/index.css
    • MyClassName/index.js
    • MyClassName/index.tpl

Generic Directories

  • collections: Backbone.Collection extensions.
  • components: UI components (e.g. Marionette.View extensions, React components).
  • components/**/shared: Groups of shared children components.
  • fonts: Global font assets.
  • images: Shared image assets.
  • models: Backbone.Model extensions.
  • screens: Page handlers (i.e. fetch data, select top-level component to render).
  • utils: Utilities, initializers.

Example

src
├── collections
│   ├── Champs.js
│   └── Categories.js
├── components
│   ├── Champ
│   │   ├── images
│   │   │   ├── bg-champ.jpg
│   │   │   └── icon-champ.png
│   │   ├── index.css
│   │   ├── index.js
│   │   └── index.tpl
│   └── DanceParty
│       ├── DancePartyLoading
│       │   ├── Avatar
│       │   ├── DancePartyLoadingFooter
│       │   ├── DancePartyStatusIndicator
│       │   ├── index.css
│       │   ├── index.js
│       │   └── index.tpl
│       ├── TimerBar
│       ├── shared
│       │   └── SharedForDanceParyLoadingAndTimer
│       ├── index.css
│       ├── index.js
│       └── index.tpl
├── fonts
│   └── global-font.woff2
├── images
│   └── image-used-in-more-than-one-component.png
├── index.js
├── models
│   ├── Category.js
│   └── Champ.js
├── screens
│   ├── Categories.js
│   ├── Category.js
│   └── Settings.js
└── utils
    └── logOut.js