Что такое файлы `rc` в nodejs?

83

У меня есть несколько вопросов относительно различных rcфайлов в типичном узловом приложении, например .npmrc, .babelrcи т. Д.

  • Что такое rc-файл, я знаю его конфигурацию времени выполнения для модуля, но что-нибудь еще?
  • Должен ли файл rc соответствовать .[module]rcсоглашению об именах или это просто рекомендуемый формат?
  • Какие форматы поддерживаются? Я видел форматы yaml и json, это зависит от читателя, который использует модуль?
  • Как получить доступ к rc-файлу с точки зрения модуля? Делает ли его присвоение ему [module]rcавтоматически доступным для модуля? Если да, то где это будет доступно?
  • Или модуль должен получить доступ к файлу так же, как любой другой файл из приложения, которое использует модуль, и ожидать, что он будет в понятном формате? (Это то, что я сейчас делаю с форматом json)
  • Я также видел людей, которым требовалось package.jsonзагрузить config. Что рекомендуется, package.jsonили rc файл?
  • Также чем он отличается от файла javascript, например, gulpfile.jsс module.exports? (Я имел ввиду в смысле рекомендаций, конечно я знаю разницу и преимущества файлов js и rc)

Каждый раз, когда я ищу в Google, я оказываюсь здесь и здесь , это инструмент для чтения файла rc, но не объясняет, что это такое и как они созданы и / или подключены к модулю.

Любое понимание было бы действительно полезно. благодаря

Гопикришна С
источник
В этих файлах нет ничего особенного, разные модули «случайно» используют схожую стратегию.
Felix Kling
Сообщение по теме - Что означает "rc" .bashrcи т. Д.?
RBT

Ответы:

56

Итак, во-первых, приятно спросить.

rcdotfiles - это файлы конфигурации, которые могут различаться по своему использованию, форматированию и общему значению. Вы можете создавать .[whatever name you like]rcфайлы, чтобы сообщить, какой пакет вы создаете (при условии, что другой пакет не ищет тот же самый). Обычно они полезны для какого-то инструмента, который воздействует на ваш исходный код и требует некоторой настройки, специфичной для вашего проекта. Насколько я понимаю, были подобные файлы, которые играли важную роль в системах UNIX в прошлом, и идея прижилась.

Коротко:

  • Они не относятся к узлу.
  • Это просто еще один файл
  • Что касается форматов, они могут быть практически любыми - это просто зависит от того, что вы будете использовать для их анализа и чтения. YAML, JSON и ini, вероятно, самые распространенные (по крайней мере, что я видел).
  • В большинстве случаев они, кажется, следуют условию .[program or binary name]rc
  • package.jsonфайлы могут содержать внешние метаданные, подходящие для конфигурации, это просто зависит от того, будет ли ваш проект ожидать .rcфайл или ожидать его package.json(или и то, и другое, как в случае с babel)

Смотрите также:

В качестве невероятно простого примера:

Скажем, вы хотите прочитать этот .foorcфайл, в котором используется кодировка JSON:

{
  "cool": true
}

Вы можете сделать что-то вроде этого:

'use strict';
const fs = require('fs');
fs.readFile('./.foorc', 'utf8', (err, data) => {
  if (err) throw new Error(err);
  console.log(JSON.parse(data));
})

Есть гораздо более эффективные способы сделать это, но вы можете легко написать свой собственный или найти пакет, который поддерживал бы синтаксический анализ YAML, ini и т. Д., А также предоставлял бы некоторые другие полезные части API (например, rc )

Markthethomas
источник
Значит, пакет будет обращаться к нему, как к любому другому файлу, верно? require('./.modulerc')?
Gopikrishna S
Зависит от того, что вы подразумеваете под «пакетом», но да. Я
обновлю на
17

Это не относится к Node или Babel, но *rcфайлы обычно являются файлами конфигурации в системах Unix.

Из Википедии

Файлы конфигурации также делают больше, чем просто изменяют настройки, они часто (в форме «rc-файла» ) запускают набор команд при запуске (например, «rc-файл» для оболочки может дать команду оболочке изменить каталоги, запускать определенные программы, удалять или создавать файлы - многие вещи, которые не связаны с изменением переменных в самой оболочке и поэтому не были в точечных файлах оболочки). Это соглашение заимствовано из "файлов runcom" в операционной системе CTSS.

Эта функциональность может быть и была расширена для программ, написанных на интерпретируемых языках, так что файл конфигурации фактически является другой программой, переписывающей, расширяющей или настраивающей исходную программу ; Emacs - наиболее яркий такой пример.

Соглашение об именах «rc» для «rc-файлов» было вдохновлено упомянутой выше функцией «runcom» и не означает «конфигурацию ресурсов» , «конфигурацию времени выполнения» или «удаленное управление», как часто ошибочно предполагают.

Файлы «rc» - это традиционно файлы, которые заканчиваются суффиксом «(.) rc» и содержат данные и информацию, которые используются в качестве информации конфигурации для соответствующей программы. Обычно имя этой программы - это первая часть имени rc-файла с суффиксом «(.) Rc», который используется для обозначения назначения файла, например, «.xinitrc» , «.vimrc» , «.bashrc» , « xsane.rc " .

И Runcom

Unix: из файлов runcom в системе CTSS 1962-63 через сценарий запуска / etc / rc

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

Другими словами, «rc» - это то, что прижилось еще в шестидесятых, и с тех пор довольно часто использовалось для файлов конфигурации в различных программах, включая Node, Babel и многие, многие другие.

В файлах "rc" нет ничего особенного , и они могут практически содержать любые данные, нет никаких спецификаций или других ограничений.

аденео
источник
Хм .. так что все зависит от читателя, чтобы решить, что делать, не так ли? Любой рекомендуемый способ доступа к нему?
Gopikrishna S
@GopikrishnaS - Поскольку файл "* rc" может быть практически любым, javascript, JSON, простым текстом, XML, YAML или чем-то еще, то, как вы анализируете файл, полностью зависит от того, что он содержит.
adeneo
6

RC относится к

  • запускать команды
  • конфигурация времени выполнения

https://en.wikipedia.org/wiki/Run_commands

Суффикс «rc» восходит к прародителю Unix, CTSS. В нем была функция командного сценария под названием «runcom». Ранние версии Unix использовали 'rc' в качестве имени сценария загрузки операционной системы, как дань уважения CTSS runcom.

рсельваганеш
источник
нет ссылок на «RC», «runcom» или «CTSS» в en.wikipedia.org/wiki/Run_command
wyu,
@wyu вы указываете неправильный URL. Run_commandвместо Run_commands. @rselvagenesh предоставил правильный URL.
Bala
@bala URL в ответе был отредактирован после моего комментария
wyu
@wyu, хорошо, понял.
Бала