Tôi có nên .npmignore các bài kiểm tra của tôi không?


91

Chính xác thì tôi nên đưa vào cái gì .npmignore cái gì?

Các bài kiểm tra? Stuff thích .travis.yml, .jshintrc? Bất kỳ thứ gì không cần thiết khi chạy mô-đun (ngoại trừ readme)?

Tôi không thể tìm thấy bất kỳ hướng dẫn nào về điều này.


4
nên bỏ qua tất cả những gì không cần thiết khi có người gọi npm install yourlibrary, ví dụ .travis.yml.jshintrc
Lante

có thật không? thậm chí một readme? điều này có được khuyến nghị chính thức ở bất cứ đâu không?
callum

2
README được tự động đưa vào bất kể .npmignorehoặc "files"( docs.npmjs.com/files/package.json#files ).
Nicolás Fantone

Câu trả lời:


86

Như bạn có thể thấy, NPM không thực sự chỉ ra cụ thể những gì nên đi vào đó, thay vào đó họ có một danh sách các tệp bị bỏ qua theo mặc định . Nhiều người thậm chí không sử dụng nó vì mọi thứ trong của bạn .gitignorebị bỏ qua npmtheo mặc định nếu.npmignore không tồn tại. Ngoài ra, nhiều tệp đã bị bỏ qua theo mặc định bất kể cài đặt nào và một số tệp luôn bị loại trừ khỏi việc bị bỏ qua, như được nêu trong liên kết ở trên.

Không có nhiều thông tin chính thức về những gì luôn nên có vì về cơ bản nó là một tập hợp con của .gitignore, nhưng từ những gì tôi thu thập được từ việc sử dụng nút trong 5 năm, đây là những gì tôi đã đưa ra.

Lưu ý: Theo sản xuất, tôi có nghĩa là bất kỳ lúc nào mà mô-đun của bạn được ai đó sử dụng và không phát triển trên chính mô-đun đó.


Các nguồn được biên dịch chéo trước khi phát hành

  • Ưu điểm : Nếu bạn đang sử dụng ngôn ngữ biên dịch chéo thành JavaScript, bạn có thể biên dịch trước trước khi phát hành và không bao gồm .coffeecác tệp trong gói của mình nhưng tiếp tục theo dõi chúng trong kho lưu trữ git của bạn.

Tạo tập tin thừa

  • Ưu điểm : Những người sử dụng những thứ như node-gypcó thể có các tệp đối tượng được tạo trong quá trình xây dựng mà không bao giờ nên đi vào gói.
  • Nhược điểm : .gitignoreDù sao thì điều này cũng nên đi vào . Bạn phải đặt những thứ này bên trong đây nếu bạn đang sử dụng một .npmignoretệp vì nó ghi đè .gitignoretheo quan điểm của npm.

Kiểm tra

  • Ưu điểm : Ít hành lý hơn trong mã sản xuất của bạn.
  • Nhược điểm : Bạn không thể chạy thử nghiệm trên môi trường trực tiếp trong trường hợp rất hiếm có lỗi cụ thể của hệ thống, chẳng hạn như phiên bản lỗi thời của nút đang chạy khiến thử nghiệm không thành công.

Cài đặt tích hợp liên tục / tệp meta

  • Ưu điểm : Một lần nữa, ít hành lý hơn. Những thứ như .travis.ymlkhông bắt buộc để sử dụng, thử nghiệm hoặc xem mã.

Ví dụ về mã và tài liệu không phải readme

  • Ưu điểm : Hành lý ít hơn. Một số người tồn tại trong trường phái suy nghĩ mà nếu bạn không thể thể hiện ít nhất chức năng khả thi tối thiểu trong Readme của mình, thì mô-đun của bạn quá lớn.
  • Nhược điểm : Mọi người không thể xem tài liệu đầy đủ và các ví dụ mã trên hệ thống tệp của riêng họ. Họ sẽ phải truy cập vào kho lưu trữ (cũng yêu cầu kết nối internet).

Đối tượng trang Github

  • Ưu điểm : Bạn chắc chắn không cần phải xả các bản phát hành của mình với CNAMEcác tệp hoặc trình giữ chỗ index.htmlnếu bạn sử dụng mô-đun của mình cũng phục vụ hai nhiệm vụ như một gh-pageskho lưu trữ.

bower.json và những người bạn

  • Ưu điểm : Nếu bạn quyết định xây dựng trong các phụ thuộc của mình trước khi phát hành, bạn không cần người dùng cuối cài đặt bower sau đó cài đặt nhiều thứ hơn với nó. Cá nhân tôi sẽ giữ những thứ đó trong gói. Khi tôi thực hiện npm install, tôi chỉ nên dựa vào npm và không có nguồn bên ngoài nào khác.

Về cơ bản, bạn nên sử dụng nó nếu có thứ gì đó bạn muốn giữ ngoài gói npm của mình nhưng không nằm ngoài kho lưu trữ npm của bạn. Đó không phải là một danh sách dài các mục, nhưng npm thà xây dựng trong chức năng hơn là để mọi người mắc kẹt với các đối tượng không liên quan trong gói của họ.


Không có cách nào để xóa các tập lệnh không thể sử dụng khỏi tệp package.json. Ví dụ: tập lệnh thử nghiệm? Tôi cảm thấy một chút lộn xộn để loại bỏ tất cả mọi thứ nhưng giữ các script trong file ...
inf3rno

Không có. Bạn có thể bỏ qua chúng khỏi package.json vì nó chủ yếu dành cho NPM và nếu bạn chỉ đang chạy thử nghiệm, bạn có thể truy cập chúng qua lệnh gốc để chạy chúng.
SamT

64

Tôi đồng ý với câu trả lời ngắn gọn và tổng hợp của lantecâu trả lời lớn của SamT :

  • Bạn không nên đưa các bài kiểm tra vào gói của mình.
  • Gói của bạn chỉ nên chứa các tệp thời gian chạy sản xuất.
  • Điều đó sẽ làm cho gói của bạn đơn giản hơn và tải xuống nhanh hơn.

Đóng góp của tôi cho những câu trả lời đó:

.npmignore là cách danh sách đen để đạt được lựa chọn tệp gói. Nhưng theo một cách thực tế hơn, bạn có thể lập danh sách trắng các tệp bạn cần đưa vào gói của mình bằng cách sử dụng trường tệp trong package.json của bạn:

{
  "files": [
    "lib/",
    "index.js"
  ]
}

Tôi nghĩ điều đó đơn giản hơn, bằng chứng trong tương lai và có ngữ nghĩa tốt hơn;)


3
... không có gì dễ nhớ hơn và ít gây tai nạn hơn khi sử dụng (nếu bạn hay quên như tôi). Cảm ơn vì mẹo, điều này thật tuyệt.
Connor

2
Tôi thích cách tiếp cận này.
Brady Holt

2
Tôi nghĩ bạn thậm chí có thể bỏ qua "index.js" giả sử nó là tệp 'chính' trong package.json của bạn :)
Ben George

Bỏ qua hình ảnh và tài liệu không cần thiết là tốt. Nhưng bỏ qua các bài kiểm tra có lẽ không phải là một ý kiến ​​hay. Việc tải xuống một số KB bổ sung không mất nhiều thời gian và thực hiện đệ quy npm testtrên tất cả các node_modules có thể cung cấp cho bạn một gợi ý nếu có thứ gì đó hoạt động khác trong một môi trường nhất định.
adelriosantiago

3
@ NicolásFantone Thuộc tính tệp cũng chấp nhận mẫu hình cầu . Vì vậy, chúng tôi có thể bỏ qua các tệp thử nghiệm mà không cần tạo .npmignore. files: ["lib", "!lib/**/*.test.js"]. :)
Sureshraj

15

Chỉ cần làm rõ, bất cứ khi nào ai đó làm npm install your-library, npm sẽ tải xuống tất cả các tệp nguồn mà kho lưu trữ bao gồm, ngoại trừ các tệp mà bạn đưa vào.npmignore .

Biết rằng những người cài đặt thư viện của bạn sẽ chỉ cần thư viện của bạn chạy, mọi thứ khác sẽ không cần thiết.

Ví dụ: khi ai đó cài đặt một thư viện, có thể họ không quan tâm đến tệp .travis.ymlcủa bạn hoặc của bạn .jshintrc, hoặc thậm chí một số hình ảnh, tệp Grunt, tài liệu, v.v.

.npmignore có thể cho phép gói npm của bạn có ít tệp hơn và tải xuống nhanh hơn


1
Ý kiến ​​ở đây là tốt, nhưng cần làm rõ: .npmignorekhông ảnh hưởng trực tiếp đến những gì đã tải xuống , nó ảnh hưởng đến những gì đi vào gói của bạn khi bạn npm xuất bản và tải lên. Điều này gián tiếp tạo ra các tệp nhỏ hơn để tải xuống.
Mark Stosberg

2

Không bao gồm các bài kiểm tra của bạn. Thông thường, các bài kiểm tra có kích thước gấp 5 lần kích thước của cơ sở mã thực tế. Miễn là các bài kiểm tra của bạn trên Github, v.v., vậy là đủ tốt.

Nhưng điều bạn hoàn toàn nên làm là kiểm tra gói NPM của mình ở định dạng đã xuất bản . Tạo một số thử nghiệm khói nằm trong cơ sở mã thực, nhưng không phải là một phần của bộ thử nghiệm.

Bạn có thể đọc về cách kiểm tra gói của mình sau khi tarball nó, tại đây: https://github.com/ORESoftware/r2g

Làm thế nào để kiểm tra kết quả `npm xuất bản` mà không thực sự xuất bản lên NPM?

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.