Các tệp `rc` trong nodejs là gì?


83

Tôi có một số câu hỏi liên quan đến các rctệp khác nhau trong một ứng dụng nút điển hình, như .npmrc, .babelrcv.v.

  • Tệp rc là gì, tôi biết nó là cấu hình thời gian chạy cho mô-đun, nhưng bất cứ điều gì khác?
  • Tệp rc có phải tuân theo .[module]rcquy ước đặt tên hay chỉ là định dạng được khuyến nghị?
  • Các định dạng được hỗ trợ là gì? Tôi đã thấy cả hai định dạng yaml và json, nó có phụ thuộc vào trình đọc mà mô-đun sử dụng không?
  • Làm cách nào để truy cập tệp rc từ góc độ của mô-đun? Việc đặt tên nó [module]rccó làm cho nó tự động có sẵn cho mô-đun không? Nếu vậy nó sẽ có sẵn ở đâu?
  • Hay mô-đun nên truy cập tệp giống như bất kỳ tệp nào khác từ ứng dụng đang sử dụng mô-đun và mong đợi nó ở định dạng dễ hiểu? (Đây là những gì tôi đang làm ngay bây giờ, với định dạng json)
  • Tôi cũng đã thấy những người yêu cầu package.jsontải cấu hình. Cái nào được đề xuất package.jsonhay một tệp rc?
  • Ngoài ra, nó khác với tệp javascript như thế nào gulpfile.jsvới module.exports? (Ý tôi là theo ý nghĩa của các khuyến nghị, tất nhiên tôi biết sự khác biệt và lợi thế của tệp js và rc)

Mỗi khi tôi tìm kiếm trên google, tôi kết thúc ở đâyđây , đó là một công cụ để đọc tệp rc nhưng không giải thích chúng là gì hoặc chúng được cấu tạo như thế nào và / hoặc kết nối với mô-đun.

Mọi thông tin chi tiết sẽ thực sự hữu ích. Cảm ơn


Không có gì đặc biệt về các tệp này, các mô-đun khác nhau "chỉ xảy ra" để sử dụng một chiến lược tương tự.
Felix Kling

Câu trả lời:


56

Vì vậy, trước hết, hãy hỏi một cách độc đáo.

rcdotfiles là các tệp cấu hình có thể khác nhau về cách sử dụng, định dạng và ý nghĩa tổng thể. Bạn có thể tạo .[whatever name you like]rctệp để thông báo bất kỳ gói nào bạn sắp tạo (miễn là gói khác không tìm kiếm gói tương tự). Thông thường, chúng hữu ích cho một số loại công cụ hoạt động trên mã nguồn của bạn và cần một số điều chỉnh cụ thể cho dự án của bạn. Tôi hiểu rằng có những tệp tương tự đóng vai trò quan trọng trong các hệ thống UNIX trong nhiều năm trước đây và ý tưởng này đã bị mắc kẹt.

Nói ngắn gọn:

  • Chúng không dành riêng cho nút.
  • Chúng chỉ là một tệp khác
  • Đối với các định dạng, chúng có thể là hầu hết mọi thứ - nó chỉ phụ thuộc vào những gì bạn sẽ sử dụng để phân tích cú pháp và đọc chúng. YAML, JSON và ini có lẽ là phổ biến nhất (ít nhất là tôi đã thấy).
  • Trong hầu hết các trường hợp, chúng dường như tuân theo quy ước .[program or binary name]rc
  • package.jsontệp có thể chứa siêu dữ liệu bên ngoài phù hợp với cấu hình, nó chỉ phụ thuộc vào việc dự án của bạn có mong đợi .rctệp hay không mong đợi nó trong package.json(hoặc cả hai, như trong trường hợp của babel)

Xem thêm:

Như một ví dụ cực kỳ đơn giản:

Giả sử bạn muốn đọc .foorctệp này sử dụng mã hóa JSON:

{
  "cool": true
}

Bạn có thể làm điều gì đó như sau:

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

Có rất nhiều cách tốt hơn để làm điều này, nhưng bạn có thể dễ dàng viết của riêng bạn hoặc tìm một gói hỗ trợ phân tích cú pháp YAML, ini, v.v. và cung cấp một số bit hay khác của API (ví dụ: rc )


Vì vậy, gói sẽ truy cập nó giống như bất kỳ tệp nào khác phải không? require('./.modulerc')?
Gopikrishna S

Phụ thuộc vào những gì bạn có nghĩa là "gói", nhưng có. Tôi sẽ cập nhật w / ví dụ đơn giản
markthethomas vào

17

Nó không dành riêng cho Node hoặc Babel, nhưng *rccác tệp thường là tệp cấu hình trong hệ thống Unix

Từ Wikipedia

Các tệp cấu hình còn làm được nhiều việc hơn là chỉ sửa đổi cài đặt, chúng thường (ở dạng "tệp rc" ) chạy một tập hợp lệnh khi khởi động (ví dụ: "tệp rc" cho một trình bao có thể hướng dẫn trình bao thay đổi thư mục, chạy các chương trình nhất định, xóa hoặc tạo tệp - nhiều thứ không liên quan đến việc sửa đổi các biến trong chính shell và do đó không có trong dotfiles của shell). Quy ước này được mượn từ "tệp runcom" trên hệ điều hành CTSS.

Chức năng này có thể và đã được mở rộng cho các chương trình được viết bằng ngôn ngữ thông dịch như tệp cấu hình thực sự là một chương trình khác đang viết lại hoặc mở rộng hoặc tùy chỉnh chương trình gốc ; Emacs là ví dụ nổi bật nhất.

Quy ước đặt tên "rc" của "tệp rc" được lấy cảm hứng từ cơ sở "runcom" được đề cập ở trên và không viết tắt cho "cấu hình tài nguyên" , "cấu hình thời gian chạy" hoặc "điều khiển từ xa" như người ta thường đoán sai.

Các tệp "rc" theo truyền thống là các tệp kết thúc bằng hậu tố "(.) rc" và chứa dữ liệu và thông tin được sử dụng làm thông tin cấu hình cho chương trình liên kết. Thông thường, tên của chương trình đó là phần đầu tiên của tên tệp rc, với hậu tố "(.) Rc" được sử dụng để biểu thị mục đích của tệp, ví dụ: ".xinitrc" , ".vimrc" , ".bashrc" , " xsane.rc " .

Runcom

Unix: từ các tệp runcom trên hệ thống CTSS 1962-63, thông qua tập lệnh khởi động / etc / rc

Tệp tập lệnh chứa hướng dẫn khởi động cho một chương trình ứng dụng (hoặc toàn bộ hệ điều hành) , thường là tệp văn bản chứa các lệnh thuộc loại có thể đã được gọi theo cách thủ công khi hệ thống đang chạy nhưng sẽ được thực thi tự động mỗi khi hệ thống khởi động. Xem thêm tập tin chấm.

Nói cách khác, "rc" chỉ là một thứ gì đó tồn tại từ những năm sáu mươi, và đã được sử dụng khá thường xuyên cho các tệp cấu hình trong các loại chương trình khác nhau kể từ đó, bao gồm Node, Babel và nhiều người khác.

Không có gì đặc biệt về tệp "rc" và chúng hầu như có thể chứa bất kỳ loại dữ liệu nào, không có đặc điểm kỹ thuật hoặc hạn chế nào khác.


Hmm .. vậy tất cả đều phụ thuộc vào người đọc để quyết định làm gì, phải không? Bất kỳ cách nào được đề xuất để truy cập nó?
Gopikrishna S

@GopikrishnaS - Là một tệp "* rc" có thể là hầu hết mọi thứ, javascript, JSON, văn bản thuần túy, XML, YAML hoặc bất cứ thứ gì, cách bạn phân tích cú pháp tệp phụ thuộc hoàn toàn vào những gì nó chứa.
adeneo

6

RC đề cập đến

  • chạy lệnh
  • cấu hình thời gian chạy

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

Hậu tố 'rc' trở lại với ông bà của Unix, CTSS. Nó có một tính năng tập lệnh lệnh được gọi là "runcom". Các Unix đầu tiên sử dụng 'rc' cho tên của tập lệnh khởi động của hệ điều hành, như một lời tri ân cho CTSS runcom.


không có tham chiếu nào đến "RC", "runcom" hoặc "CTSS" trong en.wikipedia.org/wiki/Run_command
wyu

@wyu bạn đang giới thiệu sai url. Run_commandthay vì Run_commands. @rselvagenesh đã cung cấp url chính xác.
Bala

@bala URL trong câu trả lời đã được chỉnh sửa sau nhận xét của tôi
wyu

@wyu ok, hiểu rồi.
Bala
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.