Узел.соглашения об именовании проектов js для файлов и папок


каковы соглашения об именовании файлов и папок в большом узле.проект js?

должен ли я капитализировать, camelCase или недооценить?

Ie. это считается действительным?

project-name
    app
        controllers
            someThings.js
            users.js
        models
                someThing.js
                user.js
        views
            some-things
                index.jade
            users
                logIn.jade
                signUp.jade
    ...
8 58

8 ответов:

через несколько лет с узлом я могу сказать, что есть нет соглашения для структуры каталогов / файлов. Однако большинство (профессиональных) экспресс-приложений используют такие настройки, как:

/
  /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-стиля (тогда как выше это немного смешивается).

I также нравится этот шаблон для разделения файлов:

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 / static / index.js

var express = require('express');

module.exports = function(app) {

  app.use(express.static(app.settings.static.path));

};

Это позволяет аккуратно развязать весь исходный код без необходимости беспокоиться о зависимостях. Действительно хорошее решение для борьбы с неприятным javascript. Реальный пример-это рядом, который использует эту установку.

обновления (имена):

что касается имен файлов наиболее распространенными являются короче,нижний регистр имена. Если ваш файл может быть описан только двумя словами, большинство проектов JavaScript используют подчеркивание в качестве разделителя.

обновление (переменные):

в отношении переменных применяются те же "правила", что и для имен файлов. Однако прототипы или классы должны использовать camel-case.

обновление (руководства по стилю):

нет никаких конвенций. Есть какая-то логическая структура.

единственное, что я могу сказать: Никогда не используйте имена файлов и каталогов camelCase. Зачем? Он работает, но на Mac и Windows нет разницы между некоторыми действиями и некоторыми действиями. Я сталкивался с этой проблемой, и не один раз. Мне нужен такой файл:

var isHidden = require('./lib/isHidden');

но, к сожалению, я создал файл с полным строчные: lib/ishidden.js. Это сработало для меня на mac. Он отлично работал на mac моего коллеги. Тесты выполняются без ошибки. После развертывания мы получили огромную ошибку:

Error: Cannot find module './lib/isHidden'

О да. Это под Linux. Таким образом, структура каталогов camelCase может быть опасной. Этого достаточно для коллеги, который разрабатывает на Windows или Mac.

Так что используйте подчеркивание (_) или тире (-) сепаратор, если вам нужно.

использовать kebab-case для всех имен пакетов, папок и файлов.

почему?

вы должны представить, что любая папка или файл могут быть извлечены в свой собственный пакет в один прекрасный день. Пакеты не могут содержать прописные буквы.

в названии новых пакетов не должно быть прописных букв. https://docs.npmjs.com/files/package.json#name

таким образом, camelCase никогда не следует использовать. Это оставляет snake_case и kebab-case.

kebab-case на сегодняшний день является наиболее распространенным соглашением. Единственное использование подчеркиваний - для внутренних пакетов узлов, и это просто соглашение с первых дней.

на Google JavaScript Style Guide'

имена файлов должны быть в нижнем регистре и может содержать знак подчеркивания (_) или тире (-), но без дополнительных знаков препинания. Следуйте Конвенции о том, что ваш проект использует. Расширение файлов должно быть .js.

большинство людей используют camelCase в JS. Если вы хотите открыть исходный код что-нибудь, я предлагаю вам использовать этот: -)

узел.js не применяет никаких соглашений об именовании файлов (кроме index.js). И язык Javascript в целом тоже не делает. Здесь вы можете найти десятки потоков, которые предлагают camelCase, дефисы и подчеркивания, любой из которых отлично работает. Так что это зависит от вас. Выберите один и придерживайтесь его.

по мне: для файлов, используйте Нижний случай верблюда, если модуль.экспорт-это объект, я имею в виду одноэлементный модуль. Это также применимо к файлам JSON, поскольку они также являются одной тонной. Используйте верхний случай верблюда, если модуль.exports возвращает функцию конструктора, где она действует как класс.

для папок используйте короткие имена. Если необходимо иметь несколько слов, пусть это будет полностью нижний регистр, разделенный" -", чтобы он работал на всех платформах последовательно.

Я уже дал +1 к @bodokaiser. Ниже приводится мой комментарий.

редактировать.

есть некоторые классы, такие как EventEmitter. они следовали java-стилю именования классов. Здесь я следую одному пункту. все глобалы имеют малый регистр (даже не camelcase), и все упакованные классы являются Java - капитализированными. это означает, что если вы определяете свой собственный класс, как function MyFunction(){...}, вы обычно хотите создать его с заглавной буквы.