Що таке `rc` файли в nodejs?


83

У мене є деякі питання , що стосуються різних rcфайлів в додатку типового вузла, як .npmrc, і .babelrcт.д.

  • Що таке rc-файл, я знаю, що він виконує конфігурацію для модуля, але щось інше?
  • Чи повинен файл rc відповідати .[module]rcправилам іменування, чи це просто рекомендований формат?
  • Які формати підтримуються? Я бачив як формати yaml, так і json, чи залежить це від читача, яким модулем користується?
  • Як отримати доступ до файлу rc з точки зору модуля? Чи називає його так, як [module]rcце робить його автоматично доступним для модуля? Якщо так, де він буде доступний?
  • Або модуль повинен отримати доступ до файлу так само, як і будь-який інший файл із програми, яка використовує модуль, і очікувати, що він буде в зрозумілому форматі? (Це те, що я роблю зараз, у форматі json)
  • Я також бачив людей, які потребують package.jsonзавантаження конфігурації. Що рекомендується, package.jsonабо файл rc?
  • Також чим він відрізняється від файлу javascript, як gulpfile.jsу module.exports? (Я мав на увазі в сенсі рекомендацій, звичайно, я знаю різницю та переваги файлів js та rc)

Кожного разу, коли я шукаю в google, я опиняюся тут і тут , що є інструментом для читання rc-файлу, але не пояснює, що це таке, або як вони побудовані та / або підключені до модуля.

Будь-яке розуміння було б дійсно корисним. Дякую


У цих файлах немає нічого особливого, різні модулі «просто трапляються», щоб використовувати подібну стратегію.
Фелікс Клінг,

Пов’язана публікація - Що означає „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 )


Тож пакет отримав би до нього доступ як будь-який інший файл, чи не так? require('./.modulerc')?
Gopikrishna S

Залежить від того, що ви маєте на увазі під "пакунком", але так.
Оновлю з

17

Це не характерно для Node або Babel, але *rcфайли, як правило, є файлами конфігурації в системах Unix

З Вікіпедії

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

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

«Гс» іменування з «файлів гс» був натхненний «Runcom» об'єктазгаданого вищеі не варто для «конфігурації ресурсів» , «конфігурації під час виконання» , або «дистанційного керування» , як це часто помилково здогадувався.

"rc"Файли традиційно є файлами, які закінчуються суфіксом "(.) rc" і містять дані та інформацію, яка використовується як інформація про конфігурацію для пов'язаної програми. Зазвичай ім'я цієї програми є першою частиною імені файлу rc, із суфіксом "(.) Rc", який вказує на призначення файлу, наприклад ".xinitrc" , ".vimrc" , ".bashrc" , " xsane.rc " .

І Runcom

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

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

Іншими словами, "rc" - це просто щось, що застрягло ще в шістдесятих роках, і з тих пір досить часто використовується для конфігураційних файлів у різних видах програм, включаючи Node, Babel та багато-багато інших.

У файлах "rc" немає нічого особливого , і вони можуть фактично містити будь-які дані, немає специфікації та інших обмежень.


Хм .. так що все залежить від читача, який сам вирішить, що робити, так? Будь-який рекомендований спосіб доступу до нього?
Гопікрішна С

@GopikrishnaS - Як файл "* rc" може бути майже що завгодно, javascript, JSON, звичайний текст, XML, YAML або що завгодно, спосіб розбору файлу повністю залежить від того, що він містить.
adeneo

6

RC посилається на

  • запускати команди
  • конфігурація часу виконання

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

Суфікс 'rc' повертається до бабусі та дідуся Unix, CTSS. Він мав функцію командного сценарію під назвою "runcom". Ранні юнікси використовували 'rc' для імені сценарію завантаження операційної системи, як данину пам'яті CTSS runcom.


немає посилань на "RC", "runcom" або "CTSS" в en.wikipedia.org/wiki/Run_command
wyu

@wyu Ви посилаєтесь на неправильну URL-адресу. Run_commandзамість Run_commands. @rselvagenesh вказав правильну URL-адресу.
Бала

@bala URL-адреса у відповіді була відредагована після мого коментаря
wyu,

@wyu ок зрозумів.
Бала
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.