Để npm chọn registry theo scope của gói, không phải theo VPN
Một mục scope gửi các gói của công ty đến registry riêng và để mọi thứ khác công khai. Định tuyến, thông tin xác thực và độ ưu tiên là ba quyết định nữa.
Kết nối VPN không nên đồng nghĩa với việc chỉnh cài đặt registry của npm hai lần mỗi ngày. Một mục scope trong tệp cấu hình ở cấp dự án có thể gửi các gói của công ty đến một registry và mọi thứ khác đến registry công khai, không cần chuyển đổi và không để lại override nào vào chiều thứ Sáu. Vấn đề là cách này chỉ giải quyết việc đặt tên; định tuyến, thông tin xác thực và độ ưu tiên của cấu hình là ba thứ riêng biệt, mỗi thứ hỏng theo cách của nó.
Hai cái tên, hai đích đến
Tên gói npm hoặc có scope hoặc không. Tên có scope bắt đầu bằng dấu at và một định danh scope, và chính định danh đó là thứ cấu hình có thể ánh xạ. Không có gì khác về gói quan trọng với việc ánh xạ. Registry không bao giờ thấy một yêu cầu dựa trên việc gói là nội bộ hay công khai; nó chỉ thấy một cái tên.
Vì vậy tệp bên dưới diễn đạt hai ý định trong ba dòng: các gói công khai đi đến registry công khai, và các gói dưới scope của công ty đi đến registry của công ty với một token cho host đó.
registry=https://registry.npmjs.org/
@acme:registry=https://packages.corp.example/
//packages.corp.example/:_authToken=${NPM_TOKEN}
Thay scope, host và tên biến bằng những gì tổ chức thực sự cung cấp. Cấu trúc mới là điều quan trọng, không phải các giá trị ví dụ. Hai dòng cấu hình mang toàn bộ chính sách, đó là lý do đáng hiểu chúng thay vì sao chép.
Giữ việc ánh xạ và mạng trong những ngăn riêng trong đầu bạn. Một mục scope không thể làm cho một host không thể truy cập trở nên truy cập được, và một tunnel đang hoạt động không thể nói cho npm biết một gói thuộc registry nào.
Viết tệp theo đúng thứ tự
Đặt tệp dự án lên đầu trong lập luận của bạn dù npm đọc nhiều tệp. Một .npmrc trong thư mục dự án là tệp mà đồng nghiệp của bạn thừa hưởng qua repository, nên nó phải diễn đạt chính sách chung chứ không phải token cá nhân của bạn. Tệp đó cũng là tệp mà người đánh giá sẽ đọc. Giữ nó đủ nhỏ để có thể xem xét trong một cái nhìn.
Để dòng registry mặc định trỏ đến registry công khai trừ khi tổ chức đã quyết định khác. Xóa nó khiến máy phụ thuộc vào những gì tệp cấp người dùng nói, đúng kiểu phụ thuộc ngầm tạo ra kết quả khác nhau trên hai máy tính xách tay.
Dòng scope không phải ký tự đại diện. Một tên ngoài scope tiếp tục dùng giá trị mặc định, đó là hành vi bạn muốn cho mọi phụ thuộc mà bạn không tự viết.
Kiểm tra tệp phân giải thành gì trước khi commit, dùng một tên gói tạm thời thay vì cài đặt thật, để một sai sót không tốn gì.
Thông tin xác thực thuộc về một host, không phải một dự án
Các mục xác thực được gắn với một host registry và, nơi registry cần, với một đường dẫn. Đó là lý do dòng token bắt đầu bằng dấu gạch chéo đôi và host thay vì scope. Khi bạn đã thấy host ở vị trí đó, phần còn lại của dòng không còn trông như dấu câu tùy tiện. Đó là một địa chỉ, và token được gắn vào nó.
Dùng một biến môi trường giữ token nguyên văn ra khỏi tệp trong repository. Nó không làm token vô hình ở mọi nơi; nó vẫn xuất hiện trong môi trường tiến trình, và một lệnh in cấu hình có thể tiết lộ nó.
Cung cấp biến thông qua bất kỳ cơ chế thông tin xác thực cục bộ hoặc CI nào mà tổ chức phê duyệt, và không bao giờ dán một token thật vào một ví dụ có thể bị sao chép vào tài liệu.
Nếu có hai registry, mỗi cái có mục riêng. Một cài đặt token duy nhất không đủ điều kiện thì tốt nhất là mơ hồ và tệ nhất là bị gửi đến sai host.
Khi registry sai thắng
Cấu hình có nhiều lớp, và giá trị có hiệu lực không nhất thiết là giá trị trong tệp bạn vừa sửa. Cài đặt dự án, cài đặt người dùng, cài đặt toàn cục và biến môi trường đều tham gia. Chính sự phân lớp đó khiến một bản sửa hoạt động trên máy bạn mà không hoạt động trong container của đồng nghiệp. Đó cũng là lý do đáng in giá trị hiệu lực trước khi tranh luận về nó.
Biến môi trường là thủ phạm thường gặp trong CI, nơi một job đặt registry một lần và mọi bước sau thừa hưởng nó. Loại phổ biến thứ hai là một tệp cấp người dùng trên máy của lập trình viên ghi đè những gì repository nói.
In cấu hình hiệu lực và registry đã phân giải cho một tên có scope và một tên không có scope trước khi gỡ lỗi bất cứ điều gì khác. Nếu hai câu trả lời đó đúng như bạn mong đợi, vấn đề là mạng; nếu không, vấn đề là cấu hình và bao nhiêu công việc VPN cũng không giúp được.
Danh sách kiểm tra trước khi commit
Xác nhận tên scope khớp với các gói thực sự được phát hành, rằng registry mặc định là rõ ràng và rằng dòng token nêu đúng host. Một lỗi đánh máy trong scope tạo ra thất bại kỳ lạ nhất trong tất cả, vì gói được phân giải từ registry công khai và trả về module của người khác có cùng tên. Kiểm tra tên trước khi gỡ lỗi token.
Xác nhận registry riêng có thể truy cập từ máy trong ngữ cảnh chạy cài đặt, không chỉ từ trình duyệt của bạn. Sự khác biệt đó quan trọng khi một proxy hoặc container có định tuyến khác với shell của bạn.
Sau đó xác nhận hành vi trên một checkout sạch không có gói được lưu trong bộ nhớ đệm. Cài đặt mới là bài kiểm tra duy nhất cho thấy một đồng nghiệp mới sẽ trải nghiệm điều gì.