Соглашения об именах проектов и файлов для 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(){...}Вы обычно хотите создать его с заглавной буквы.

Другие вопросы по тегам