ฉันควรสนใจการทดสอบของฉันหรือไม่?


93

ควรใส่อะไรกันแน่.npmignore?

การทดสอบ? สิ่งที่ชอบ.travis.yml, .jshintrc? มีอะไรที่ไม่จำเป็นเมื่อเรียกใช้โมดูล (ยกเว้น readme)?

ฉันไม่พบคำแนะนำเกี่ยวกับเรื่องนี้


4
ควรละเว้นทุกสิ่งที่ไม่จำเป็นเมื่อมีคนโทรnpm install yourlibraryมาเช่น.travis.ymlและ.jshintrc
lante

จริงๆ? แม้แต่ readme? แนะนำอย่างเป็นทางการทุกที่ไหม
callum

3
README จะรวมโดยอัตโนมัติโดยไม่คำนึงถึง.npmignoreหรือ"files"( docs.npmjs.com/files/package.json#files )
Nicolás Fantone

คำตอบ:


86

ที่คุณอาจพบ NPM ไม่ได้โดดรัฐโดยเฉพาะสิ่งที่ควรจะไปในที่นั่นค่อนข้างจะมีรายชื่อของไฟล์ละเว้นโดยค่าเริ่มต้น หลายคนไม่ได้ใช้มันเนื่องจากทุกอย่างในของคุณ.gitignoreถูกละเว้นnpmโดยค่าเริ่มต้นถ้า.npmignoreไม่มีอยู่ นอกจากนี้ไฟล์จำนวนมากจะถูกละเว้นโดยค่าเริ่มต้นโดยไม่คำนึงถึงการตั้งค่าและไฟล์บางไฟล์จะถูกละเว้นจากการถูกเพิกเฉยตามที่ระบุไว้ในลิงก์ด้านบน

ไม่มีความเป็นทางการมากนักเกี่ยวกับสิ่งที่ควรจะมีอยู่เสมอเพราะโดยพื้นฐานแล้วมันเป็นเพียงส่วนย่อย.gitignoreแต่จากสิ่งที่ฉันรวบรวมจากการใช้โหนดเป็นเวลา 5 ปีนี่คือสิ่งที่ฉันคิดขึ้นมา

หมายเหตุ: จากการผลิตฉันหมายถึงทุกครั้งที่มีคนใช้โมดูลของคุณและไม่ต้องพัฒนาบนโมดูลเอง


แหล่งที่มาที่รวบรวมข้ามคอมไพล์ก่อนเผยแพร่

  • ข้อดี : หากคุณใช้ภาษาที่คอมไพล์ข้ามไปยัง JavaScript คุณสามารถคอมไพล์ล่วงหน้าก่อนรีลีสและไม่รวม.coffeeไฟล์ในแพ็กเกจของคุณ แต่ให้ติดตามในที่เก็บ git ของคุณ

สร้างไฟล์ที่เหลือ

  • ข้อดี : ผู้ที่ใช้สิ่งต่างๆเช่นnode-gypอาจมีไฟล์ออบเจ็กต์ที่สร้างขึ้นในระหว่างการสร้างที่ไม่ควรเข้าไปในแพ็คเกจ
  • จุดด้อย : สิ่งนี้ควรจะเข้ามา.gitignoreอยู่เสมอ คุณต้องวางสิ่งเหล่านี้ไว้ในที่นี้หากคุณใช้.npmignoreไฟล์อยู่แล้วเนื่องจากมันถูกแทนที่.gitignoreจากมุมมองของ npm

การทดสอบ

  • ข้อดี : ลดน้ำหนักสัมภาระในรหัสการผลิตของคุณ
  • จุดด้อย : คุณไม่สามารถเรียกใช้การทดสอบในสภาพแวดล้อมจริงในโอกาสที่น้อยมีความล้มเหลวเฉพาะระบบเช่นโหนดที่ทำงานอยู่รุ่นล้าสมัยซึ่งทำให้การทดสอบล้มเหลว

การตั้งค่าการรวมอย่างต่อเนื่อง / ไฟล์ Meta

  • ข้อดี : อีกครั้งสัมภาระน้อยลง สิ่งต่างๆเช่น.travis.ymlไม่จำเป็นสำหรับการใช้งานการทดสอบหรือการดูรหัส

ตัวอย่างเอกสารและโค้ดที่ไม่ได้อ่าน

  • ข้อดี : สัมภาระน้อย. มีบางคนอยู่ในโรงเรียนแห่งความคิดซึ่งถ้าคุณไม่สามารถแสดงฟังก์ชันการทำงานขั้นต่ำที่เป็นไปได้อย่างน้อยที่สุดใน Readme ของคุณโมดูลของคุณจะใหญ่เกินไป
  • จุดด้อย : ผู้คนไม่สามารถดูเอกสารประกอบและตัวอย่างโค้ดในระบบไฟล์ของตนเองได้ พวกเขาจะต้องไปที่ที่เก็บ (ซึ่งต้องใช้การเชื่อมต่ออินเทอร์เน็ตด้วย)

วัตถุ Github

  • ข้อดี : คุณไม่จำเป็นต้องทิ้งการเผยแพร่ของคุณด้วยCNAMEไฟล์หรือตัวยึดตำแหน่งindex.htmlหากคุณใช้โมดูลของคุณทำหน้าที่สองหน้าที่เป็นที่gh-pagesเก็บเช่นกัน

bower.json และผองเพื่อน

  • ข้อดี : หากคุณตัดสินใจที่จะสร้างการอ้างอิงของคุณก่อนที่จะปล่อยคุณไม่จำเป็นต้องให้ผู้ใช้ปลายทางติดตั้ง bower จากนั้นติดตั้งสิ่งต่างๆเพิ่มเติมด้วยสิ่งนั้น โดยส่วนตัวฉันจะเก็บของนั้นไว้ในหีบห่อ เมื่อฉันทำnpm installฉันควรพึ่งพา npm เท่านั้นและไม่มีแหล่งข้อมูลภายนอกอื่น ๆ

โดยพื้นฐานแล้วคุณควรใช้มันหากมีบางสิ่งที่คุณต้องการเก็บไว้จากแพ็คเกจ npm ของคุณ แต่ไม่ได้อยู่ในที่เก็บ npm ของคุณ ไม่ใช่รายการที่ยาว แต่ npm ต้องการสร้างฟังก์ชันการทำงานมากกว่าที่จะมีคนติดอยู่กับวัตถุที่ไม่เกี่ยวข้องในแพ็คเกจ


ไม่มีวิธีลบสคริปต์ที่ไม่สามารถใช้งานได้ออกจากไฟล์ package.json เช่นการทดสอบสคริปต์? ฉันรู้สึกยุ่งเล็กน้อยที่จะลบทุกอย่างออกไป แต่เก็บสคริปต์ไว้ในไฟล์ ...
inf3rno

ไม่มีไม่มี คุณอาจละเว้นจาก package.json เนื่องจากเป็น NPM เป็นหลักและหากคุณกำลังใช้งานการทดสอบคุณสามารถเข้าถึงได้โดยใช้คำสั่งเดิมเพื่อเรียกใช้
SamT

65

ฉันเห็นด้วยกับคำตอบสั้น ๆ และไวยากรณ์ของ Lanteและคำตอบที่ยิ่งใหญ่ของ SamT :

  • คุณไม่ควรรวมการทดสอบไว้ในแพ็คเกจของคุณ
  • แพ็กเกจของคุณควรมีเฉพาะไฟล์รันไทม์ที่ใช้งานจริง
  • ซึ่งจะทำให้การโหลดแพ็กเกจของคุณตรงไปตรงมาและรวดเร็วยิ่งขึ้น

การมีส่วนร่วมของฉันกับคำตอบเหล่านั้น:

.npmignoreเป็นวิธีบัญชีดำในการเลือกไฟล์แพ็คเกจ แต่ในทางปฏิบัติคุณสามารถอนุญาตพิเศษไฟล์ที่คุณต้องรวมไว้ในแพ็คเกจของคุณโดยใช้ฟิลด์ไฟล์ใน package.json ของคุณ:

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

ฉันคิดว่ามันง่ายกว่าพิสูจน์ได้ในอนาคตและมีความหมายที่ดีกว่า;)


3
... ไม่ต้องพูดอะไรที่จำง่ายกว่าและใช้งานง่ายน้อยลง (ถ้าคุณขี้ลืมเท่าที่ฉันจะเป็นได้) ขอบคุณสำหรับเคล็ดลับนี้ยอดเยี่ยมมาก
Connor

2
ฉันชอบแนวทางนี้
Brady Holt

2
ฉันคิดว่าคุณสามารถละเว้น "index.js" ได้โดยสมมติว่าเป็นไฟล์ "main" ใน package.json ของคุณ :)
Ben George

การละเว้นรูปภาพและเอกสารที่ไม่จำเป็นนั้นทำได้ดี แต่การเพิกเฉยต่อการทดสอบอาจไม่ใช่ความคิดที่ดี การดาวน์โหลด KB เพิ่มเติมบางส่วนใช้เวลาไม่มากนักและการทำแบบวนซ้ำnpm testในnode_modulesทั้งหมดสามารถให้คำแนะนำแก่คุณได้หากมีบางอย่างทำงานแตกต่างกันในบางสภาพแวดล้อม
adelriosantiago

5
@ NicolásFantone ไฟล์คุณสมบัติยอมรับglobรูปแบบเช่นกัน .npmignoreดังนั้นเราจึงสามารถละเว้นแฟ้มการทดสอบโดยไม่ต้องสร้าง files: ["lib", "!lib/**/*.test.js"]. :)
Sureshraj

15

เพียงชี้แจงทุกเวลามีคนไม่npm install your-library, NPMจะดาวน์โหลดไฟล์ที่มาทั้งหมดที่ซื้อคืนรวมถึงการยกเว้นไฟล์ที่คุณรวมอยู่ในของคุณ.npmignoreจะดาวน์โหลดไฟล์ที่มาทั้งหมดที่ซื้อคืนรวมถึงการยกเว้นไฟล์ที่คุณรวมอยู่ในของคุณ

รู้ว่าคนที่ติดตั้งไลบรารีของคุณต้องการเพียงแค่ไลบรารีของคุณทำงานเท่านั้นสิ่งอื่น ๆ ก็ไม่จำเป็น

ตัวอย่างเช่นเมื่อมีคนติดตั้งไลบรารีอาจเป็นไปได้ว่าเขา / เธอไม่สนใจ ไฟล์.travis.ymlของคุณหรือของคุณ.jshintrcหรือแม้แต่รูปภาพบางไฟล์ Grunt เอกสารประกอบ ฯลฯ

.npmignore อาจทำให้แพ็กเกจ npm ของคุณมีไฟล์น้อยลงและดาวน์โหลดได้เร็วขึ้น


2
ความเชื่อมั่นที่นี่เป็นสิ่งที่ดี แต่เพื่อชี้แจง: .npmignoreไม่ส่งผลโดยตรงต่อสิ่งที่ดาวน์โหลดแต่จะส่งผลต่อสิ่งที่เข้าสู่แพ็กเกจของคุณเมื่อคุณเผยแพร่และอัปโหลดnpm สิ่งนี้จะสร้างไฟล์ขนาดเล็กเพื่อดาวน์โหลดโดยทางอ้อม
Mark Stosberg

3

อย่ารวมการทดสอบของคุณ บ่อยครั้งการทดสอบมีขนาดเท่ากับ 5x ของโค้ดเบสจริง ตราบใดที่การทดสอบของคุณอยู่ใน Github ฯลฯ นั่นก็ดีพอแล้ว

แต่สิ่งที่คุณควรทำอย่างยิ่งคือทดสอบแพ็คเกจ NPM ของคุณในรูปแบบที่เผยแพร่ในรูปแบบของการตีพิมพ์สร้างการทดสอบควันบางส่วนที่อยู่ในโค้ดเบสจริง แต่ไม่ได้เป็นส่วนหนึ่งของชุดทดสอบ

คุณสามารถอ่านเกี่ยวกับการทดสอบแพ็กเกจของคุณหลังจากเล่น Tarball ได้ที่นี่: https://github.com/ORESoftware/r2g

จะทดสอบผลลัพธ์ "npm เผยแพร่" โดยไม่เผยแพร่ไปยัง NPM ได้อย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.