Что такое соглашение о присвоении имен в javascript? [закрыто]

283

Должны ли файлы называться что-то с with-hyphens.js, camelCased.js или как-то еще?

Я не нашел ответа на этот вопрос здесь .

ripper234
источник
2
Хорошее соглашение об именах - именовать имена файлов так, как вы видите эту сущность в коде. MyPluginКласс будет идти MyPlugin.js. Компонент MenuItemReact будет включен MenuItem.js. Другим разработчикам потребуется / import 'your-cool-module' и использовать несколько символов из него, поэтому назовите его cool-module.js. -
Дан Даскалеску
1
Этот пост не основан на опциях. На самом деле это важно. Здесь у вас есть руководство от Google - google.github.io/styleguide/jsguide.html#file-name . (Руководство по стилю Google JavaScript)
zwitterion

Ответы:

184

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

product-name.plugin-ver.sion.filetype.js

где пара product-name+ pluginтакже может представлять пространство имен и модуль . versionИ filetype, как правило , по желанию.

filetypeможет быть что-то относительно того, как содержимое файла. Часто встречаются:

  • min для минимизированных файлов
  • custom для пользовательских или измененных файлов

Примеры:

  • jquery-1.4.2.min.js
  • jquery.plugin-0.1.js
  • myapp.invoice.js
Брайан Менард
источник
31
Я согласен с тем, что вы сказали. Но есть одна вещь, с которой я сейчас борюсь: что, если «плагин» содержит два слова? Разделить их по точкам? jquery.myPlugin-1.0.0.js или jquery.my.plugin-1.0.0.js или jquery.my_plugin-1.0.0.js или jquery.myplugin-1.0.0.js или, может быть, даже jquery.my-plugin- 1.0.0.js? Может быть, вы можете завершить свои примеры с этим, спасибо!
Mayrs
4
А как насчет модулей AMD ? Если вы используете версию в именах файлов, вы должны изменить много файлов, если номер версии изменится.
Кнут
3
@junior, это старый пост, но быстрый поиск показывает, что плагины jquery не соответствуют каким-либо конкретным правилам. Похоже, что (1) объединение слов, (2) с использованием регистра позвоночника и (3) с использованием camelCase используются примерно с одинаковой частотой.
Бхолбен
Не стоит забывать, что в некоторых версиях и файловых системах возникают проблемы с распознаванием различия между словом в нижнем регистре и одним и тем же словом un upper или camelCase (например, «ThisWord» в некоторых средах совпадает с «thisword»). Что следует иметь в виду при использовании соглашения CamelCase.
amypellegrini
@knut вы должны загружать не по именам версий, а сопоставлять имя модуля с конкретным файлом версии.
Далоре
132

Я не знаю каких-либо конкретных соглашений для файлов javascript, поскольку они не являются уникальными в Интернете по сравнению с файлами CSS, HTML-файлами или любым другим типом файлов, подобных этому. Есть несколько «безопасных» вещей, которые вы можете сделать, чтобы уменьшить вероятность случайного столкновения с кроссплатформенной проблемой:

  1. Используйте все строчные имена файлов. Есть некоторые операционные системы, которые не чувствительны к регистру имен файлов, и использование всех строчных букв предотвращает непреднамеренное использование двух файлов, которые отличаются только случаем, который может не работать в некоторых операционных системах.
  2. Не используйте пробелы в имени файла. Хотя технически это можно сделать, есть много причин, по которым пробелы в именах файлов могут привести к проблемам.
  3. Дефис в порядке для разделителя слов. Если вы хотите использовать какой-либо разделитель для нескольких слов вместо пробела или верблюда, как в случае various-scripts.js, дефис - это безопасный и полезный и часто используемый разделитель.
  4. Подумайте об использовании номеров версий в ваших именах файлов. Если вы хотите обновить свои сценарии, спланируйте эффекты кэширования в браузере или CDN. Самый простой способ использовать долгосрочное кэширование (для повышения скорости и эффективности), но немедленное и безопасное обновление при обновлении файла JS - это включить номер версии в развернутое имя файла или путь (как jQuery делает с jquery-1.6.2.js). ), а затем вы ударяете / меняете этот номер версии при каждом обновлении / изменении файла. Это гарантирует, что ни одна страница, которая запрашивает более новую версию, никогда не будет обслуживать старую версию из кэша.
jfriend00
источник
56

Официального универсального соглашения об именовании файлов JavaScript не существует.

Есть несколько различных вариантов:

  • scriptName.js
  • script-name.js
  • script_name.js

все действительные соглашения об именах, однако я предпочитаю предложенное jQuery соглашение об именах (для плагинов jQuery, хотя оно работает для любого JS)

  • jquery.pluginname.js

Прелесть этого соглашения об именах в том, что оно явно описывает добавляемое загрязнение пространства имен.

  • foo.js адды window.foo
  • foo.bar.js адды window.foo.bar

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

  • foo-1.2.1.js
  • foo-1.2.2.js
  • ...
  • foo-2.1.24.js
zzzzBov
источник
10
+1 за The beauty to this naming convention is that it explicitly describes the global namespace pollution being added., никогда не замечал этого
Adrien Be
2
Мой единственный вопрос: что делать, если у вас есть файл, который создает Fooили myFoo, вы бы просто назвали файл Foo.jsили, myFoo.jsсоответственно?
точка с запятой
14

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

Что касается имен файлов, это чисто вопрос предпочтений и вкуса. Я предпочитаю называть файлы дефисами, потому что тогда мне не нужно тянуться к клавише Shift, как это происходит при работе с именами файлов camelCase; и потому что мне не нужно беспокоиться о различиях между именами файлов Windows и Linux (имена файлов Windows не чувствительны к регистру, по крайней мере, в XP).

Таким образом, ответ, как и многие другие, «это зависит» или «это зависит от вас».

Единственное правило, которому вы должны следовать, - это быть последовательным в выбранной вами конвенции.

Пит Уилсон
источник
6
+1 для рассуждения дефис против верблюда.
виолончель
6

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

Например, у меня есть модуль раскрытия, объявленный var knockoutUtilityModule = function() {...}в его собственном файле с именем knockoutUtilityModule.js, хотя объективно я предпочитаю knockout-utility-module.js.

Точно так же, поскольку я использую механизм связывания для объединения сценариев, я занялся определением инстанцируемых функций (шаблонов представления моделей и т. Д.), Каждая из которых находится в отдельном файле в стиле C # для удобства сопровождения. Например, ProductDescriptorViewModel живет сам по себе в ProductDescriptorViewModel.js (я использую прописные буквы для создаваемых функций).

Том Зал
источник