Node.js соглашения об именах файлов для файлов и папок
Каковы соглашения об именах для файлов и папок в большом проекте Node.js?
Должен ли я использовать капитал, camelCase или под-счет?
Т.е. считается ли это действительным?
project-name
app
controllers
someThings.js
users.js
models
someThing.js
user.js
views
some-things
index.jade
users
logIn.jade
signUp.jade
...
Ответы
Ответ 1
После нескольких лет работы с узлом я могу сказать, что нет соглашений для структуры каталогов/файлов. Однако большинство (профессиональных) экспресс-приложений используют такие настройки, как:
/
/bin - scripts, helpers, binaries
/lib - your application
/config - your configuration
/public - your public files
/test - your tests
Примером использования этой настройки является nodejs-starter.
Я лично изменил эту настройку на:
/
/etc - contains configuration
/app - front-end javascript files
/config - loads config
/models - loads models
/bin - helper scripts
/lib - back-end express files
/config - loads config to app.settings
/models - loads mongoose models
/routes - sets up app.get('..')...
/srv - contains public files
/usr - contains templates
/test - contains test files
По моему мнению, последний лучше соответствует структуре каталогов в стиле Unix (тогда как первый немного смешивает).
Мне также нравится этот шаблон для разделения файлов:
Библиотека /index.js
var http = require('http');
var express = require('express');
var app = express();
app.server = http.createServer(app);
require('./config')(app);
require('./models')(app);
require('./routes')(app);
app.server.listen(app.settings.port);
module.exports = app;
Библиотека/статические /index.js
var express = require('express');
module.exports = function(app) {
app.use(express.static(app.settings.static.path));
};
Это позволяет аккуратно разделить весь исходный код, не беспокоясь о зависимостях. Действительно хорошее решение для борьбы с неприятным Javascript. Пример из реальной жизни - поблизости, который использует эту настройку.
Обновление (имена файлов):
Что касается имен файлов, наиболее распространенными являются короткие, строчные имена файлов. Если ваш файл можно описать только двумя словами, в большинстве проектов JavaScript в качестве разделителя используется подчеркивание.
Обновление (переменные):
В отношении переменных применяются те же "правила", что и для имен файлов. Однако прототипы или классы должны использовать camelCase.
Обновление (руководства по стилю):
Ответ 2
Используйте kebab-case
для всех имен пакетов, папок и файлов.
Почему?
Вы должны представить, что любая папка или файл может быть извлечена в свой собственный пакет однажды. Пакеты не могут содержать заглавные буквы.
Новые пакеты не должны иметь заглавных букв в имени. https://docs.npmjs.com/files/package.json#name
Поэтому camelCase
никогда не следует использовать. Это оставляет snake_case
и kebab-case
.
kebab-case
на сегодняшний день является самым распространенным соглашением сегодня. Единственное использование подчеркиваний для внутренних пакетов node, и это просто соглашение с первых дней.
Ответ 3
Нет соглашений. Существует некоторая логическая структура.
Единственное, что я могу сказать:
Никогда не используйте имена файлов и каталогов camelCase. Зачем? Он работает, но на Mac и Windows нет никаких различий между someAction и некоторыми действиями. Я встретил эту проблему, и не один раз. Мне нужен файл такой:
var isHidden = require('./lib/isHidden');
Но, к сожалению, я создал файл с полным нижним регистром: lib/ishidden.js
. Это сработало для меня на Mac. Он отлично работал на Mac моего коллеги. Тесты выполняются без ошибок. После развертывания мы получили огромную ошибку:
Error: Cannot find module './lib/isHidden'
О да. Это ящик для Linux. Поэтому структура каталога camelCase может быть опасной. Этого достаточно для коллеги, который разрабатывает Windows или Mac.
Поэтому используйте разделитель (_) или тире (-), если вам нужно.
Ответ 4
Основано наРуководстве по стилю Google JavaScript'
Имена файлов должны быть строчными и могут содержать подчеркивание (_) или тире (-), но без дополнительной пунктуации. Следуйте соглашению, которое ваш проект использует. Расширение имени файла должно быть .js.
Ответ 5
Большинство людей используют camelCase
в JS. Если вы хотите открыть исходный код, я предлагаю вам использовать его: -)
Ответ 6
Node.js не применяет никаких соглашений об именах файлов (кроме index.js
). И язык Javascript вообще не является ни тем, ни другим. Здесь вы можете найти десятки потоков, которые предлагают camelCase, дефисы и подчеркивания, любой из которых отлично работает. Так что это зависит от вас. Выберите один и придерживайтесь его.
Ответ 7
По мне: для файлов используйте нижний корпус верблюда, если module.exports - это объект, я имею в виду одноэлементный модуль. Это также применимо к файлам JSON, так как они также являются одним тонном. Используйте верхний корпус верблюда, если module.exports возвращает функцию-конструктор, где он действует как класс.
В папках используются короткие имена. Если необходимо иметь несколько слов, пусть это будет полностью нижний регистр, разделенный символом "-", чтобы он работал на всех платформах последовательно.
Ответ 8
Я уже дал +1 к @bodokaiser. Следующее - это только мой комментарий.
Редакцией.
Есть такие классы, как EventEmitter
. они следовали за Java-классом классов именования. Здесь я следую одному пункту. все глобалы - это маленький случай (даже не camelcase), а все упакованные классы - это стиль java - заглавный. что означает, что если вы определяете свой собственный класс, например function MyFunction(){...}
, вы обычно хотите его загладить.