Соглашения об именах проектов и файлов для 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
...
9 ответов
После нескольких лет работы с узлом я могу сказать, что нет никаких соглашений для структуры каталогов / файлов. Однако большинство (профессиональных) экспресс-приложений используют такие настройки:
/
/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 (в то время как вышесказанное немного смешивает).
Мне также нравится этот шаблон для разделения файлов:
Lib / 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;
Lib / статический / index.js
var express = require('express');
module.exports = function(app) {
app.use(express.static(app.settings.static.path));
};
Это позволяет аккуратно разделить весь исходный код без необходимости беспокоиться о зависимостях. Действительно хорошее решение для борьбы с неприятным JavaScript. Пример реального мира поблизости, который использует эту настройку.
Обновление (имена файлов):
Что касается имен файлов, наиболее распространенными являются короткие, строчные имена файлов. Если ваш файл может быть описан только двумя словами, большинство проектов JavaScript используют подчеркивание в качестве разделителя.
Обновление (переменные):
Относительно переменных применяются те же "правила", что и для имен файлов. Прототипы или классы, однако, должны использовать чехол для верблюдов.
Обновление (руководства по стилю):
Использование kebab-case
для всех пакетов, папок и имен файлов.
Зачем?
Вы должны представить, что однажды папка или файл могут быть извлечены в его собственный пакет. Пакеты не могут содержать заглавные буквы.
Новые пакеты не должны содержать заглавных букв в имени. https://docs.npmjs.com/files/package.json#name
Следовательно, camelCase
никогда не должен использоваться. Это оставляет snake_case
а также kebab-case
,
kebab-case
на сегодняшний день является наиболее распространенным соглашением сегодня. Единственное использование подчеркивания - для внутренних узловых пакетов, и это просто соглашение с первых дней.
Там нет конвенций. Есть некоторая логическая структура.
Единственное, что я могу сказать: никогда не используйте имена файлов и каталогов camelCase. Зачем? Это работает, но на Mac и Windows нет никаких различий между someAction и некоторыми действиями. Я встречал эту проблему и не один раз. Мне нужен файл вроде этого:
var isHidden = require('./lib/isHidden');
Но, к сожалению, я создал файл с полной строчной буквы: lib/ishidden.js
, Это сработало для меня на Mac. Это работало нормально на Mac моего коллеги. Тесты запускаются без ошибок. После развертывания мы получили огромную ошибку:
Error: Cannot find module './lib/isHidden'
О да. Это коробка Linux. Таким образом, структура каталогов camelCase может быть опасной. Этого достаточно для коллеги, который разрабатывает на Windows или Mac.
Поэтому используйте символ подчеркивания (_) или тире (-), если вам нужно.
Основано на " Руководстве по стилю Google JavaScript"
Имена файлов должны быть строчными и могут содержать подчеркивания (_) или тире (-), но без дополнительной пунктуации. Следуйте соглашению, которое использует ваш проект. Расширение имени файла должно быть.js.
Node.js не применяет никаких соглашений об именах файлов (кроме index.js
). И язык Javascript в целом тоже нет. Здесь вы можете найти десятки тем, которые предлагают camelCase, дефисы и подчеркивания, которые прекрасно работают. Так что решать вам. Выберите один и придерживайтесь его.
По мне: для файлов используйте нижний регистр верблюдов, если module.exports является объектом, я имею в виду одноэлементный модуль. Это также применимо к JSON-файлам, поскольку они также составляют одну тонну. Используйте верхний регистр верблюда, если module.exports возвращает функцию конструктора, в которой он действует как класс.
Для папок используйте короткие имена. Если необходимо иметь несколько слов, пусть это будет полностью нижний регистр, разделенный знаком "-", чтобы он работал на всех платформах согласованно.
Большинство людей используют camelCase
в JS. Если вы хотите что-нибудь с открытым исходным кодом, я предлагаю вам использовать это:-)
вот моя идея
project-name
app
controllers
somethings.controller.js
user-story.controller.js
users.controller.js
models
something.model.js
user.model.js
views
some-things
index.view.jade
users
login.view.jade
signup.view.jade
Я уже дал +1 к @bodokaiser. Ниже приведен только мой комментарий.
Редакция.
Есть несколько классов, таких как EventEmitter
, они следовали Java-стилю именования классов. Здесь я следую одному пункту. все глобальные переменные имеют маленький регистр (даже не верблюжий), и все упакованные классы выполнены в стиле java - с большой буквы. это означает, что если вы определяете свой собственный класс, как function MyFunction(){...}
Вы обычно хотите создать его с заглавной буквы.