Đó là một câu hỏi hay để có. Có những ưu và nhược điểm. Tôi thảo luận về chủ đề để bạn có thể đưa ra ý kiến của riêng mình.
Bạn có nên cam kết thư mục node_modules cho Git không?
Tôi đề cập đến Git nhưng điều tương tự cũng áp dụng cho bất kỳ hệ thống kiểm soát phiên bản nào mà bạn tình cờ sử dụng
Đó là một câu hỏi hay để có. Có những ưu và nhược điểm.
Tôi đề nghị mặc định làkhông phảicam kết thư mục node_modules và thay vào đó thêm nó vào.gitignore
tập tin.
Bạn có thể có những nhu cầu đặc biệt làm đảo ngược quyết định này.
Tôi thảo luận về chủ đề để bạn có thể đưa ra ý kiến của riêng mình.
Dưới đây là một số lập luận ủng hộ việc không cam kết node_modules
Bạn giữ lịch sử Git của mình sạch sẽ. Khi bạn thêm một gói mới, bạn lưu trữpackage.json
vàpackage-lock.json
thay đổi tệp. Khi bạn quyết định cập nhật phiên bản gói, tất cả những gì bạn lưu trữ làpackage-lock.json
thay đổi tập tin.
package-lock.json
là một tính năng tương đối mới của npm, làm mất đithu nhỏ bọclệnh được sử dụng trong quá khứ
Bạn tránh phải đặt có thể hàng trăm MB phụ thuộc vào kho lưu trữ của mình và điều này có nghĩa là theo thời gian, nó sẽ nhanh hơn để làm việc với. Chuyển các nhánh và kiểm tra mã là 2 hoạt động bị ảnh hưởng rất nhiều bởi kích thước kho lưu trữ.
Khi làm việc với các chi nhánh, bạn có thể có xung đột hợp nhất mở rộng ra ngoài mã của bạn và thay vào đó, liên quan đến mã phụ thuộc. Điều này không tốt để giải quyết và có thể khiến bạn mất nhiều thời gian. Tránh đặt
Một yêu cầu kéo hoặc hợp nhất nếu thay đổi các phụ thuộc, sẽ có nhiều tệp hơn tham gia vào quá trình. Các công cụ trở nên chậm hơn hoặc thậm chí quyết định không hiển thị toàn bộ sự khác biệt (ví dụ: GitHub)
Mô-đun nút gốc cần được biên dịch lại nếu bạn triển khai trên nền tảng khác với máy phát triển của mình (trường hợp sử dụng phổ biến: bạn phát triển trên Mac, triển khai trên Linux). Bạn cần gọinpm rebuild
, làm mất đồng bộ máy chủ.
Không cam kết node_modules có nghĩa là bạn cần liệt kê tất cả các mô-đun của mình trongpackage.json
(vàpackage-lock.json
) như một bước bắt buộc. Điều này thật tuyệt vì bạn có thể không cần mẫn để làm như vậy và một số hoạt động npm có thể bị hỏng nếu bạn không làm như vậy.
Mẹo: không cần sử dụng phiên bản cụ thể trong
package.json
tệp, không còn nữa kể từ khi giới thiệupackage-lock.json
tập tin.
Nếu bạn sử dụng riêngdependencies
vàdevDependencies
bộ, bằng cách cam kếtnode_modules
thư mục về cơ bản bạn đang cam kếtdevDependencies
và không có cách nào (dễ dàng) để bản dựng sản xuất loại bỏ chúng.
Những lý do có thể khiến bạn phạm vào node_modules và cách giảm thiểu chúng
Annpm
gói có thể bị tác giả của nó xóa khỏi sổ đăng ký npm. Nó đã xảy ra với người nổi tiếngleft-pad
incident in 2016 (đọc thêm). Điều này rất hiếm khi xảy ra đối với các gói phổ biến. Nếu điều này xảy ra, bạn có thể không còn quyền truy cập vào phần chức năng cụ thể đó nữa.
Bạn cũng có thể tranh luận rằngnpm
không được đảm bảo sẽ tồn tại vô thời hạn, nó có thể biến mất, vì vậy, một cách dễ dàng để đảm bảo có mã đầy đủ của ứng dụng của bạn trong tương lai là cam kết nó cùng với ứng dụng của bạn.
Mỗi khi bạn sử dụng một gói, hãy tạo một nhánh rẽ trên GitHub. Thỉnh thoảng, hãy cập nhật nguồn gốc (có thể được tự động hóa).
Điều này không phải lúc nào cũng thực tế vì các gói có thể có hàng chục phụ thuộc riêng của chúng.
Bạn có thể sử dụng máy chủ lưu trữ riêng cho dự án của mình và sử dụng máy chủ đó để lưu trữ tất cả các phần phụ thuộc của bạn.
Các tùy chọn bao gồm
- sinopia
- npm_lazy
- npm-lazy-mirror
- nghệ thuật
- npm Enterprise, từ công ty npm
Một lý do khác để cam kết các phụ thuộc là khả năng nhanh chóng chỉnh sửa mã, nếu bạn tìm thấy lỗi hoặc nếu bạn muốn thêm thứ gì đó vào thư viện.
Đây là một con dao hai lưỡi: nếu bạn làm như vậy, bạn sẽ mất khả năng nâng cấp gói nếu các bản phát hành mới được tạo ra và nó chỉ tốt cho các bản sửa lỗi nhanh chóng, tạm thời.
Giải pháp tối ưu là gửi một PR thực hiện những gì bạn muốn cho dự án ban đầu hoặc fork nó và sử dụng fork của bạn làm phụ thuộc.
Tải xuống miễn phí của tôiSổ tay Node.js
Các hướng dẫn nút khác:
- Giới thiệu về trình quản lý gói npm
- Giới thiệu về Node.js
- Yêu cầu HTTP bằng Axios
- Nơi lưu trữ ứng dụng Node.js
- Tương tác với API Google Analytics bằng Node.js
- Trình chạy gói nút npx
- Hướng dẫn package.json
- Npm cài đặt các gói ở đâu?
- Cách cập nhật Node.js
- Cách sử dụng hoặc thực thi một gói được cài đặt bằng npm
- Tệp package-lock.json
- Phiên bản ngữ nghĩa sử dụng npm
- Bạn có nên cam kết thư mục node_modules cho Git không?
- Cập nhật tất cả các phụ thuộc Node lên phiên bản mới nhất của chúng
- Phân tích cú pháp JSON với Node.js
- Tìm phiên bản đã cài đặt của gói npm
- Luồng Node.js
- Cài đặt phiên bản cũ hơn của gói npm
- Lấy thư mục hiện tại trong Node
- Cách đăng nhập một đối tượng trong Node
- Thể hiện chức năng từ tệp Node bằng cách sử dụng xuất
- Sự khác biệt giữa Node và Browser
- Thực hiện yêu cầu HTTP POST bằng Node
- Nhận dữ liệu nội dung yêu cầu HTTP bằng Node
- Bộ đệm nút
- Sơ lược về lịch sử Node.js
- Cách cài đặt Node.js
- Bạn cần biết bao nhiêu JavaScript để sử dụng Node?
- Cách sử dụng Node.js REPL
- Nút, chấp nhận các đối số từ dòng lệnh
- Xuất ra dòng lệnh bằng Node
- Chấp nhận đầu vào từ dòng lệnh trong Node
- Gỡ cài đặt gói npm với `` npm gỡ cài đặt ''
- gói npm toàn cầu hoặc cục bộ
- npm phụ thuộc và devDependencies
- Vòng lặp sự kiện Node.js
- Hiểu process.nextTick ()
- Hiểu setIm Instant ()
- Bộ phát sự kiện nút
- Xây dựng một máy chủ HTTP
- Thực hiện các yêu cầu HTTP với Node
- Mô-đun Node fs
- Yêu cầu HTTP trong Node bằng Axios
- Đọc tệp bằng Node
- Đường dẫn tệp nút
- Viết tệp bằng Node
- Số liệu thống kê về tệp nút
- Làm việc với bộ mô tả tệp trong Node
- Làm việc với các thư mục trong Node
- Mô-đun đường dẫn nút
- Mô-đun Node http
- Sử dụng WebSockets với Node.js
- Những điều cơ bản về cách làm việc với MySQL và Node
- Xử lý lỗi trong Node.js
- Hướng dẫn Pug
- Cách đọc các biến môi trường từ Node.js
- Cách thoát khỏi chương trình Node.js
- Mô-đun hệ điều hành Node
- Mô-đun sự kiện Node
- Nút, sự khác biệt giữa phát triển và sản xuất
- Cách kiểm tra xem tệp có tồn tại trong Node.js hay không
- Cách tạo tệp trống trong Node.js
- Cách xóa tệp bằng Node.js
- Cách lấy ngày cập nhật cuối cùng của tệp bằng Node.js
- Cách xác định một ngày có phải là hôm nay trong JavaScript hay không
- Cách ghi một đối tượng JSON vào tệp trong Node.js
- Tại sao bạn nên sử dụng Node.js trong dự án tiếp theo của mình?
- Chạy một máy chủ web từ bất kỳ thư mục nào
- Cách sử dụng MongoDB với Node.js
- Sử dụng Công cụ dành cho nhà phát triển của Chrome để gỡ lỗi ứng dụng Node.js
- Pnpm là gì?
- Danh sách tùy chọn Node.js Runtime v8
- Cách khắc phục lỗi "Thiếu quyền ghi" khi sử dụng npm
- Cách bật Mô-đun ES trong Node.js
- Cách sinh ra một quy trình con với Node.js
- Cách lấy cả nội dung được phân tích cú pháp và nội dung thô trong Express
- Cách xử lý tải lên tệp trong Node.js
- Sự phụ thuộc ngang hàng trong một mô-đun Node là gì?
- Cách ghi tệp CSV với Node.js
- Cách đọc tệp CSV với Node.js
- Mô-đun lõi Node
- Tăng số lượng nhiều thư mục cùng một lúc bằng Node.js
- Cách in canvas thành URL dữ liệu
- Cách tạo và lưu hình ảnh với Node.js và Canvas
- Cách tải xuống hình ảnh bằng Node.js
- Cách đổi tên hàng loạt tệp trong Node.js
- Cách lấy tên của tất cả các tệp trong một thư mục trong Node
- Cách sử dụng các lời hứa và chờ đợi với các hàm dựa trên cuộc gọi lại của Node.js
- Cách kiểm tra một gói npm cục bộ
- Cách kiểm tra phiên bản Node.js hiện tại khi chạy
- Cách sử dụng Sequelize để tương tác với PostgreSQL
- Cung cấp trang HTML bằng Node.js
- Cách giải quyết lỗi `use.pump không phải là hàm` trong Node.js