Відповіді:
Щодо згаданих вами папок:
/libs зазвичай використовується на замовлення classes/functions/modules/vendorабо /supportмістить сторонні бібліотеки (додається як підмодуль git при використанні git як керування джерелом)/spec містить технічні характеристики для тестів на BDD./testsмістить одиничні тести для програми (використовуючи рамки тестування, дивіться
тут )ПРИМІТКА: обидва /vendorта /supportзастарілі з моменту запровадження чистого управління пакетом NPM. Рекомендується обробляти всі сторонні залежності, використовуючи NPM та файл package.json
Створюючи досить великий додаток, я рекомендую такі додаткові папки (особливо, якщо ви використовуєте якусь MVC- / ORM-Framework, наприклад експрес чи мангусту ):
/modelsмістить усі ваші моделі ORM (звані Schemasмангустами)/views містить ваші шаблони перегляду (використовуючи будь-яку мову шаблонів, підтримувану в експресі)/public містить увесь статичний вміст (зображення, таблиці стилів, JavaScript на стороні клієнта)
/assets/images містить файли зображень/assets/pdf містить статичні PDF-файли/css містить таблиці стилів (або складений вихід двигуном css)/js містить клієнтський JavaScript/controllersмістять усі ваші експрес-маршрути, розділені модулем / областю вашої програми (зауважте: при використанні функції завантаження Express, ця папка називається /routes)Я звик організовувати свої проекти таким чином, і я думаю, що це працює досить добре.
Оновлення програм Express Express на основі CoffeeScript (з використанням підключення-активів ):
/app містить ваш складений JavaScript/assets/ містить усі активи клієнта, які потребують компіляції
/assets/js містить файли CoffeeScript на стороні клієнта/assets/css містить усі ваші ТАБЛИЦІ стилів менше/public/(js|css|img) містить ваші статичні файли, якими не обробляє жоден компілятор/src містить усі файли CoffeeScript, які стосуються вашого сервера/test містить усі сценарії тестування одиниць (реалізовані за допомогою тестової рамки на ваш вибір)/views містить усі ваші експрес-погляди (будь то нефрит, ейс чи будь-який інший механізм шаблону)На GitHub йде дискусія через подібне до цього питання: https://gist.github.com/1398757
Ви можете використовувати інші проекти для керівництва, шукайте в GitHub для:
І нарешті, у книзі ( http://shop.oreilly.com/product/0636920025344.do ) пропонується така структура:
├── index.html
├── js/
│ ├── main.js
│ ├── models/
│ ├── views/
│ ├── collections/
│ ├── templates/
│ └── libs/
│ ├── backbone/
│ ├── underscore/
│ └── ...
├── css/
└── ...
Більше прикладу з моєї архітектури проекту ви можете побачити тут:
├── Dockerfile
├── README.md
├── config
│ └── production.json
├── package.json
├── schema
│ ├── create-db.sh
│ ├── db.sql
├── scripts
│ └── deploy-production.sh
├── src
│ ├── app -> Containes API routes
│ ├── db -> DB Models (ORM)
│ └── server.js -> the Server initlializer.
└── test
В основному логічний додаток відокремлено від папок DB і APP всередині режиму SRC.
srcабо передній додаток отримує власну папку (із власною package.jsonта подібною структурою папок)?
Це непряма відповідь, що стосується самої структури папок, дуже пов'язаної.
Кілька років тому у мене було те саме питання, я взяв структуру папок, але мені довелося зробити багато каталогу, рухаючись згодом, тому що папка була призначена для інших цілей, ніж те, що я читав в Інтернеті, тобто те, що конкретна папка має різні значення для різних людей у деяких папках.
Тепер, зробивши кілька проектів, на додаток до пояснень у всіх інших відповідях, щодо самої структури папок, я настійно пропоную дотримуватися структури самої Node.js, яку можна побачити за посиланням: https://github.com/ nodejs / вузол . У ньому є велика інформація про всі, скажімо, лінери та інші, яку структуру файлів і папок вони мають і де. Деякі папки мають README, який пояснює, що знаходиться у цій папці.
Починати з вищевказаної структури добре, тому що одного дня приходить нова вимога, але ви будете мати можливість вдосконалитись, оскільки за ним уже слідує сам Node.js, який підтримується протягом багатьох років.
Сподіваюсь, це допомагає.
Важливо зауважити, що немає єдиної думки щодо того, який найкращий підхід і пов'язані рамки взагалі не застосовують і не винагороджують певні структури.
Я вважаю це неприємним та величезним накладним, але не менш важливим. Це свого роду занижена версія (але IMO важливіше) проблеми стильового керівництва . Мені б хотілося вказати на це, тому що відповідь однаковий: не має значення, яку структуру ви використовуєте, доки вона чітко визначена та узгоджена .
Тож я б запропонував шукати всебічне керівництво, яке вам подобається, і давати зрозуміти, що проект базується на цьому.
Це непросто, особливо якщо ви новачок у цьому! Розраховуйте витратити години на дослідження. Ви знайдете більшість посібників, які рекомендують структуру, подібну до MVC. Хоча кілька років тому це, можливо, було грунтовним вибором, в наш час це не обов'язково. Наприклад, ось інший підхід .
Припустимо, що ми говоримо про веб-додатки та побудову API:
Один із підходів - класифікувати файли за особливостями , як на зразок архітектури мікро-сервісу. Найбільший виграш, на мою думку, полягає в тому, що дуже легко зрозуміти, які файли відносяться до функції програми.
Найкращий спосіб ілюстрації - це приклад:
Ми розробляємо бібліотечний додаток. У першій версії програми користувач може:
У другій версії користувачі також можуть:
У третій версії користувачі також можуть:
Спочатку ми маємо таку структуру:
books
├─ controllers
│ ├─ booksController.js
│ └─ authorsController.js
│
└─ entities
├─ book.js
└─ author.js
Потім ми додаємо функції користувача та позики:
user
├─ controllers
│ └─ userController.js
├─ entities
│ └─ user.js
└─ middleware
└─ authentication.js
loan
├─ controllers
│ └─ loanController.js
└─ entities
└─ loan.js
А потім вибрана функціональність:
favorites
├─ controllers
│ └─ favoritesController.js
└─ entities
└─ favorite.js
Будь-який новий розробник, якому передають завдання додати, що пошук книг також повинен повертати інформацію, якщо будь-яка книга була позначена як улюблена, дуже легко зрозуміти, де в коді він / вона повинен шукати.
Потім, коли власник продукту підмітає і вигукує, що функцію обраного потрібно повністю видалити, її легко видалити.