A Guide to npm: The Node.js Package Manager
เผยแพร่แล้ว: 2022-03-11JavaScript เป็นภาษาที่ใช้ง่ายที่สุดในการพัฒนาเว็บไซต์และเว็บแอปพลิเคชัน ทรัพยากรจำนวนมากนั้นน่าประหลาดใจ และยิ่งกว่านั้นคือจำนวนห้องสมุดที่พร้อมใช้งาน
ในตอนแรก ห้องสมุดเหล่านี้มีน้อยและบำรุงรักษาง่าย อย่างไรก็ตามในไม่ช้าการพึ่งพาอาศัยกันจะเกิดขึ้นในไม่ช้าและจำเป็นต้องมีโซลูชันที่เป็นผู้ใหญ่มากขึ้น
เข้าสู่ Node Package Manager (npm) – ตัวจัดการแพ็คเกจ JavaScript ที่ใช้ร่วมกับ Node.js ได้อย่างโดดเด่นที่สุด แม้ว่าจะใช้งานแยกกันได้ก็ตาม ช่วยให้คุณควบคุมการพึ่งพาโปรเจ็กต์ของคุณได้อย่างดีเยี่ยม และเป็นวิธีที่ยอดเยี่ยมในการมีส่วนร่วมกับโลกโอเพนซอร์ส
คุณสามารถเริ่มต้นได้ด้วยการรัน npm install <package name> และฉีดเข้าไปในไฟล์ JavaScript ของคุณ
ต้องการติดตั้งเวอร์ชันเฉพาะหรือไม่? ไม่มีปัญหา. รัน npm install <package name>@1.2.3
ต้องการติดตั้งแพ็คเกจทั่วโลก (เช่น Mocha หรือ Angular-CLI) หรือไม่ เพียงเพิ่ม -g เช่น: npm install -g angular-cli mocha
เป็นที่ยอมรับว่ากรณีการใช้งานส่วนใหญ่จะหยุดอยู่ที่การติดตั้ง npm และไม่ต้องการสิ่งอื่นใดอีก อย่างไรก็ตาม npm มีฟีเจอร์เพิ่มเติมมากมาย ซึ่งฉันจะอธิบายให้คุณฟัง โดยเน้นที่คุณสมบัติที่ฉันคิดว่าจำเป็น มีประโยชน์จริงๆ หรือยอดเยี่ยมมาก
คำสั่ง CLI
CLI เป็นที่ที่ผู้ใช้ใช้เวลาส่วนใหญ่ในการโต้ตอบกับ npm และส่วนต่อประสานความช่วยเหลือของมันมีประโยชน์จริง ๆ
ความช่วยเหลือในการค้นหา ( ความ npm help ) จะแสดงตัวเลือกทั้งหมดออกมา และการรัน npm help-search <searchText> จะแสดงรายการผลการค้นหาให้คุณโดยตรงจากการลดราคา npm
นี่คือคำสั่งหลักที่โดดเด่น
install: มีการกล่าวถึงที่นี่เนื่องจากความจำเป็นอย่างยิ่งเมื่อทำงานกับ npm ใช้เพื่อติดตั้งแพ็คเกจใหม่ในเครื่องหรือทั่วโลก (เมื่อเพิ่ม-g) หรือเพื่อติดตั้งการพึ่งพาที่แสดงในไฟล์package.json(เพิ่มเติมในภายหลัง)uninstall: นี่เป็นสิ่งจำเป็นเช่นกัน ใช้เพื่อล้างแพ็คเกจเฉพาะจากไดเร็กทอรีnode_modulesทั้งภายในเครื่องหรือทั่วโลก (เมื่อเพิ่ม-g)access: นี่คือสนามเด็กเล่นของผู้ดูแลระบบการอนุญาตผู้ใช้ npm ภายในบริบท npm-organizations และแพ็คเกจที่มีขอบเขต (ส่วนตัว) สิ่งที่ทรงพลังอย่างจริงจัง ใช้ร่วมกับadduser,owner,teamฯลฯ ช่วยให้สามารถควบคุมได้อย่างละเอียดว่าใครสามารถเข้าถึงอะไรได้บ้างbin: แพ็คเกจติดตั้งอยู่ที่ไหนในโลก รันคำสั่งนี้เพื่อดูพาธไฟล์สัมบูรณ์cache: หากคุณเริ่มติดตั้งแพ็คเกจจาก npm ซ้าย ขวา และตรงกลาง คำสั่งนี้มีประโยชน์มาก เรียกใช้ด้วยคำสั่งย่อยlsเพื่อดูรายการแพ็กเกจที่แคชแบบโลคัล หรือด้วยคำสั่งย่อยcleanเพื่อล้างแพ็กเกจทั้งหมดที่อยู่ในแคช ย้อนกลับไปเมื่อรีจิสตรี npm ยังคงไม่เสถียรเล็กน้อย นี่เป็นสิ่งสำคัญในการกลับสู่สภาพแวดล้อมที่เสถียรหรือเพื่อรีเซ็ตสิ่งต่าง ๆ เมื่อคุณไม่ได้ตั้งค่าการอนุญาต npm อย่างเหมาะสมconfig: เราจะเข้าสู่ตัวเลือกการกำหนดค่าต่างๆ ในภายหลัง แต่คำสั่งนี้เกี่ยวข้องกับคุณสมบัติการกำหนดค่าที่คงอยู่เป็นหลักในไฟล์การกำหนดค่าภายในหรือส่วนกลางโดยใช้คำสั่งย่อยsetgetหรือdeletededupeหรือddp: เมื่อทำงานบนโปรเจ็กต์ในช่วงระยะเวลาหนึ่ง และติดตั้งแพ็กเกจโดยตรงจาก npm คำสั่งนี้จะสำรวจโครงสร้างแพ็กเกจในเครื่องและพยายามทำให้การพึ่งพาอาศัยกันง่ายขึ้นlink: เมื่อคุณกำลังพัฒนาแพ็คเกจ npm ของคุณเอง สิ่งนี้จะให้คุณสร้างลิงก์เชื่อมโยงไปยังบริบทส่วนกลาง เพื่อให้สามารถทดสอบได้ราวกับว่ามันถูกติดตั้งทั่วโลกจากรีจิสตรี npm ตัวอย่างเช่น หากคุณกำลังเขียนเครื่องมือแอสเซมบลีในโหนดที่มี CLI ติดตั้งอยู่ทั่วโลก คุณสามารถรันคำสั่งนี้และทดสอบพฤติกรรมของ CLI ของคุณโดยไม่จำเป็นต้องปรับใช้ก่อนls: ใช้เพื่อแสดงภาพการขึ้นต่อกันของแพ็คเกจและการขึ้นต่อกันในโครงสร้างแบบต้นไม้ น่าดูและยังมีประโยชน์สำหรับการเปรียบเทียบกับโครงการอื่นๆoutdated: ใช้เพื่อประเมินสถานะปัจจุบันของการอ้างอิงที่ติดตั้งและดูว่าล้าสมัยหรือไม่ ในโครงการที่รายการการขึ้นต่อกันของรูทมีความยาวหลายร้อยบรรทัด การตรวจสอบแพ็คเกจด้วยตนเองนั้นแทบจะเป็นไปไม่ได้เลย การเพิ่ม-g --depth=0ให้กับคำสั่งนี้ทำให้คุณสามารถตรวจสอบแพ็คเกจที่ติดตั้งทั่วโลกได้publish: คำสั่งนี้จำเป็นเมื่อพัฒนาแพ็คเกจของคุณเองสำหรับ npm มันทำตามชื่อที่แนะนำ มันเผยแพร่แพ็คเกจของคุณไปยังรีจิสตรี npmsearch: ใช้สิ่งนี้เพื่อค้นหาแพ็คเกจทั้งหมดที่มีข้อความที่ให้ไว้ในอาร์กิวเมนต์ที่สามในรีจิสทรีshrinkwrap: กล่าวโดยย่อ คำสั่งนี้อนุญาตให้คุณล็อกเวอร์ชันการพึ่งพาเฉพาะในแพ็คเกจตามลำดับ เพื่อให้หมายเลข semver ที่ผ่อนคลาย (การกำหนดเวอร์ชันเชิงความหมาย) ไม่ทำลายโค้ดการผลิตstar: คุณชอบแพ็คเกจที่คุณใช้จริงหรือ? ใช้คำสั่งนี้เพื่อแสดงความขอบคุณโดยตรงจากเทอร์มินัล ซึ่งจะสะท้อนให้เห็นในหน้าของแพ็คเกจในการลงทะเบียน npmupdate: โดยปกติแล้วจะเป็นไปตามคำสั่งที่outdatedเพื่ออัปเดตแพ็คเกจที่ล้าสมัยversion: สิ่งนี้ช่วยให้คุณจดชวเลขเพื่อชนคุณสมบัติรุ่นpackage.jsonและทำแท็ก git ทั้งหมดในที่เดียว
โปรดทราบว่าคำสั่งเหล่านี้ส่วนใหญ่สามารถรับคำสั่งย่อยและ/หรือการกำหนดค่าได้ และรายการนี้ไม่ได้หมายถึงการสิ้นสุดการสนทนาทั้งหมดบน CLI
npm-config
การกำหนดค่าเป็นส่วนสำคัญของ npm และมีหลายวิธีที่ตัวแปรการกำหนดค่าสามารถตั้งค่าได้
การกำหนดค่าผ่าน CLI และตัวแปรสิ่งแวดล้อม
ขั้นแรก คุณสามารถตั้งค่าคอนฟิกผ่าน CLI จากเทอร์มินัลได้
โดยทั่วไปแล้วจะมีลักษณะดังนี้: npm <command> --<configuration option> [<optional value>]
หากไม่ได้ระบุค่า ตัวเลือกจะถูกตั้งค่าเป็น true โดยค่าเริ่มต้น
ตัวอย่างเช่น สมมติว่าคุณกำลังทำงานกับแพ็คเกจ npm ที่มีขอบเขต (ส่วนตัว) และคุณตัดสินใจที่จะเผยแพร่เป็นแพ็คเกจสาธารณะ
ทำได้โดยง่ายโดยผนวก --access=public ต่อท้ายคำสั่ง publish ของคุณ หากเราไม่ได้ระบุคุณสมบัติให้เป็นสาธารณะ ค่าเริ่มต้นจะถูกจำกัด (ส่วนตัว)
การกำหนดค่าต่อท้ายคำสั่งอื่นๆ เช่นนี้จะไม่คงอยู่ทุกที่ ดังนั้นจึงอาจเป็นเรื่องที่น่าเบื่อหน่ายในการตั้งค่าอาร์เรย์ของการกำหนดค่าผ่าน CLI
ในกรณีเหล่านี้ อาจเป็นการดีกว่าที่จะตั้งค่าคอนฟิกโดยใช้ตัวแปรสภาพแวดล้อม
ตัวแปรสภาวะแวดล้อมใดๆ ที่ตั้งค่าด้วยคำนำหน้า npm_config_ จะถูกใช้เพื่อกำหนดค่า npm
ตัวอย่างเช่น: export npm_config_registry=localhost:4321 จะตั้งค่าตัวเลือกการกำหนดค่ารีจิสทรีทั่วโลก และเมื่อดำเนินการ npm จะใช้รีจิสทรี npm ที่ localhost บนพอร์ต 4321
การกำหนดค่าผ่านไฟล์ npmrc
คุณยังสามารถตั้งค่าตัวเลือกการกำหนดค่าโดยใช้ไฟล์ .npmrc พิเศษ ซึ่งสามารถตั้งค่าในระดับต่างๆ ได้ขึ้นอยู่กับความต้องการของคุณ:
- ระดับโปรเจ็กต์: ในรูทของโค้ดของโปรเจ็กต์พร้อมกับไฟล์
package.jsonโดยทั่วไปแล้วจะอยู่path/to/project/.npmrc - ระดับผู้ใช้: ไดเร็กทอรีที่กำหนดค่าบัญชีผู้ใช้เฉพาะ โดยทั่วไป
~/.npmrc - ระดับโกลบอล: ไดเร็กทอรีที่ npm ค้นหาคอนฟิกูเรชันโกลบอล โดยทั่วไปคือ
$PREFIX/etc/npmrc - ระดับในตัว: ระวัง. การกำหนดค่านี้ไม่เพียงแต่เป็นสากลเท่านั้น แต่ยังเป็นส่วนหนึ่งของซอร์สโค้ด npm และแนวทางปฏิบัติที่ดีที่สุดแนะนำ (ตามความเป็นจริง) ว่าเราไม่เปลี่ยนโค้ด เราไม่รับผิดชอบต่อการบำรุงรักษา โดยทั่วไปสามารถพบได้ที่
/path/to/npm/npmrc
การตั้งค่าคอนฟิกูเรชันในไฟล์ .npmrc สามารถแก้ไขและคงไว้ได้โดยใช้ CLI โดยการรันคำสั่งในรูปแบบนี้: npm config set <key> <value>
ตัวอย่างเช่น คุณสามารถเรียกใช้ npm config set access public เพื่อให้การกำหนดค่าการเผยแพร่ของแพ็คเกจที่กำหนดขอบเขต (ส่วนตัว) เป็นแบบสาธารณะอย่างต่อเนื่อง
โดยค่าเริ่มต้น คำสั่งนี้จะคงการกำหนดค่าไว้ภายในเครื่อง (การกำหนดค่าระดับผู้ใช้ตามที่อธิบายไว้ข้างต้น) แต่คุณสามารถเพิ่ม -g เพื่อยืนยันได้ทั่วโลก
เมื่อคอนฟิกูเรชันแบบถาวรจำเป็นต้องเกิดขึ้นในระดับโปรเจ็กต์ หรือในระดับบิวด์อิน ไฟล์ .npmrc จะต้องถูกแก้ไขโดยใช้เท็กซ์เอดิเตอร์
การกำหนดค่าผ่าน package.json
สุดท้าย การกำหนดค่าสามารถตั้งค่าได้จากไฟล์ package.json อย่างไรก็ตาม วิธีนี้ไม่ค่อยได้ใช้ (และควรใช้เฉพาะเมื่อจำเป็นเท่านั้น) เนื่องจากไฟล์ .npmrc ระดับโปรเจ็กต์เป็นสถานที่ที่นิยมใช้กันทั่วไปในการตั้งค่าคอนฟิกูเรชันแพ็กเกจ
การตั้งค่าคอนฟิกที่โดดเด่น
access: ตามที่กล่าวไว้ข้างต้น ใช้เพื่อกำหนดสิทธิ์always-auth: โปรดทราบว่าการตั้งค่านี้มีค่าเริ่มต้นเป็นเท็จ เมื่อตั้งค่าเป็นจริง npm จะต้องมีการตรวจสอบสิทธิ์เสมอเมื่อติดต่อกับรีจิสทรีca: ค่าเริ่มต้นเป็นผู้ออกใบรับรอง npm (CA) สามารถเปลี่ยนเป็นค่าว่างเพื่ออนุญาตการเข้าถึงเฉพาะผู้รับจดทะเบียนที่รู้จัก หรือใบรับรอง CA เฉพาะเพื่อให้สิทธิ์เข้าถึงเฉพาะผู้ลงทะเบียนรายนั้นเท่านั้น การตั้งค่านี้พร้อมกับcafile,certและstrict-sslนั้นไม่ค่อยมีใครใช้ แต่พูดถึงความปลอดภัยและความน่าเชื่อถือของ npm ซึ่งช่วยให้สบายใจได้เมื่อรู้ว่าแพ็คเกจที่คุณกำลังติดตั้งนั้นมาจากแหล่งที่คุณคาดหวังcolor: ค่าดีฟอลต์นี้เป็น true ทำให้คุณหลุดพ้นจากความเยือกเย็นมาตรฐานของเทอร์มินัลด้วยการระบายสีstdoutที่อนุญาตโดยตัวอธิบายไฟล์ tty หากตั้งค่าเป็นเท็จ เทอร์มินัลจะยังคงทื่อ เมื่อตั้งค่าเป็นalwaysจะแสดงผลเป็นสีเสมอdepth: การตั้งค่านี้ช่วยให้สามารถควบคุมสิ่งที่คุณเห็นได้อย่างละเอียดด้วยคำสั่งแบบเรียกซ้ำ เช่นlsและoutdatedโดยกำหนดความลึกของการดำเนินการ ค่า 0 จะประเมินการพึ่งพาระดับแรกเท่านั้น ในขณะที่ค่าอนันต์ (ค่าเริ่มต้น) จะทำให้การประเมินการขึ้นต่อกันทุกระดับ ข้อยกเว้นของกฎนี้คือเมื่อใช้กับoutdatedในกรณีนั้น อินฟินิตี้จะถูกตีความว่าเป็น 0 เพื่อให้แน่ใจว่าได้ผลลัพธ์ที่เกี่ยวข้องกันมากขึ้นdev: สิ่งนี้ถูกตั้งค่าเป็น false โดยค่าเริ่มต้น แต่เมื่อตั้งค่าเป็น true (เมื่อทำการnpm install) การพึ่งพาการพัฒนาทั้งหมดในไฟล์package.jsonจะถูกติดตั้งพร้อมกับการพึ่งพาปกติdry-run: เมื่อตั้งค่านี้เป็น true npm จะไม่ทำการเปลี่ยนแปลงใดๆ กับแพ็คเกจของคุณ แต่จะบอกคุณว่าจะทำอะไรได้บ้าง สิ่งนี้มีประโยชน์มากเมื่อรันคำสั่งบางอย่าง เช่นdedupeหรือupdate
git-tag-version: มันถูกตั้งค่าเป็น true โดยค่าเริ่มต้น การตั้งค่านี้แท็กเวอร์ชันใน git เมื่อรันคำสั่งnpm versionหากคุณใช้ npm เป็นตัวจัดการแพ็กเกจสำหรับโปรเจ็กต์ขนาดใหญ่ที่มีการแท็กเวอร์ชันใน git จะช่วยประหยัดเวลาได้ และอย่าลืมอัปเดตไฟล์package.jsonให้คุณด้วยloglevel: โดยค่าเริ่มต้น สิ่งนี้ถูกตั้งค่าเป็นwarnซึ่งให้ข้อผิดพลาดและเอาต์พุตคำเตือนเมื่อรันคำสั่ง npm การตั้งค่าอื่นๆ ได้แก่silentซึ่งไม่มีเอาต์พุตerrorซึ่งบันทึกข้อผิดพลาดไปยังเอาต์พุตเท่านั้นhttpซึ่งประกาศเฉพาะข้อผิดพลาดในคำขอ http;infoเพื่อต้องการเอาท์พุตข้อมูล);verboseซึ่งบันทึกเกือบทุกอย่าง และsillyซึ่งก็เหมือนกับชื่อที่แนะนำ ให้ผลลัพธ์จำนวนที่ไร้สาระ แล้วก็บางส่วนproduction: เมื่อตั้งค่าเป็นจริง npm จะดำเนินการตามนั้นและรันคำสั่งทั้งหมดในโหมดใช้งานจริง ซึ่งหมายความว่าจะไม่มีการติดตั้งการพัฒนาหรือการพึ่งพาที่เป็นทางเลือก และจะไม่ดำเนินการใดๆ ที่เกี่ยวข้องกับการพัฒนาrollback: เมื่อตั้งค่าเป็นจริง การติดตั้งที่ล้มเหลวทั้งหมดจะถูกลบออก สิ่งนี้มีประโยชน์เมื่อการติดตั้งการพึ่งพาล้มเหลว ขึ้นอยู่กับระดับการบันทึกของคุณ คุณควรจะสามารถเห็นได้ว่าการติดตั้งใดที่ล้มเหลว จดบันทึกสิ่งเหล่านี้ และรันคำสั่งnpm installโดยตั้งค่าตัวเลือกย้อนกลับเป็นจริง จากนั้นด้วยบันทึกย่อและการติดตั้งแบบแห้ง (ตามที่อธิบายไว้ข้างต้น) คุณจะสามารถแก้ปัญหาได้บันทึก
: When installing a package directly from the registry, you can append–save ต่อท้ายto the command which will add the installed package to the dependencies option in thefile. For example,package.jsonfile. For example,npm install lodash` จะเพิ่ม lodash ให้กับการอ้างอิงของคุณsave-dev: คล้ายกับตัวเลือกบันทึกการกำหนดค่า ให้เพิ่ม--save-devเมื่อติดตั้งแพ็คเกจ จากนั้นจะถูกเพิ่มไปยังตัวเลือก devDependencies ในไฟล์package.jsonsave-optional: คล้ายกับตัวเลือกบันทึกการกำหนดค่า ให้เพิ่ม--save-optionalเมื่อติดตั้งแพ็คเกจ จากนั้นจะถูกเพิ่มไปยังตัวเลือก optionalDependencies ในไฟล์package.jsonsave-exact: เมื่อทำการติดตั้งแพ็คเกจ ตัวเลือกsave,save-devและsave-optionalแก้ไขไฟล์package.jsonโดยการแทรกแพ็คเกจที่ติดตั้งลงในคุณสมบัติที่เกี่ยวข้องด้วยตัวดำเนินการช่วง semver เมื่อเรียกใช้การตั้งค่าการกำหนดค่า 'บันทึกที่แน่นอน' ด้วยค่าจริง ร่วมกับการตั้งค่าใดการตั้งค่าหนึ่งที่กล่าวถึงข้างต้น จะใช้หมายเลขเวอร์ชันเฉพาะ โดยไม่สนใจช่วงเซเวอร์save-prefix: ตั้งค่าตัวดำเนินการช่วง semver เมื่อใช้save,save-devหรือsave-optionalค่าดีฟอลต์คือ^ซึ่งช่วยให้สามารถอัปเกรดแพ็คเกจเล็กน้อยเมื่อติดตั้ง ค่านี้สามารถตั้งค่าเป็นโอเปอเรเตอร์ช่วงเซมเวอร์นำหน้าที่ถูกต้องได้tag-version-prefix: ค่าดีฟอลต์ทั่วไปคือvซึ่งระบุสิ่งที่อยู่ข้างหน้าเวอร์ชันแท็ก git เมื่อเรียกใช้npm version
กำลังอัปเดต npm โดยใช้ npm
คุณยังสามารถใช้ npm เพื่ออัปเดตตัวเองได้
เพียงเรียกใช้ npm install -g npm@latest แล้ว npm จะได้รับการอัปเดตเป็นเวอร์ชันเสถียรล่าสุด สิ่งสำคัญคือต้องสังเกตว่า Node.js แต่ละเวอร์ชันมาพร้อมกับ npm เวอร์ชันเฉพาะ และจากประสบการณ์ของฉัน คุณไม่ควรยุ่งกับการจับคู่นั้นมากเกินไป
ท้ายที่สุดแล้ว คำแนะนำของฉันคือให้ยึดติดกับการจับคู่ตามที่ตั้งใจไว้
เมื่อใช้ npm เป็นเครื่องมือแบบสแตนด์อโลน ตรวจสอบให้แน่ใจว่าคุณเข้าใจความหมายของการใช้เวอร์ชันที่คุณเลือก มีเครื่องมือที่ยอดเยี่ยมสำหรับการจัดการ Node.js เวอร์ชันต่างๆ (และในทางกลับกัน เวอร์ชัน npm) ในระบบเดียวกันที่เรียกว่า nvm
ไฟล์ package.json
ไฟล์ package.json เป็นองค์ประกอบสำคัญที่เชื่อมโยงทุกอย่างเข้าด้วยกัน
เป็นข้อกำหนดสำหรับการเผยแพร่แพ็คเกจไปยังรีจิสตรี npm และเป็นส่วนที่การจัดการของการพึ่งพาอาศัยกัน
มีช่องที่ต้องกรอกสองช่อง ได้แก่ "ชื่อ" และ "เวอร์ชัน" และเมื่อรวมกันแล้วคุณสมบัติเหล่านี้ควรเป็นตัวระบุที่ไม่ซ้ำกัน
ฟิลด์ชื่อควรเป็นไปตามกฎบางอย่าง ตามที่กำหนดโดยเอกสาร npm เกี่ยวกับการตั้งชื่อ และฟิลด์เวอร์ชันอยู่ภายใต้ข้อกำหนดของเซิร์ฟเวอร์
ยิ่งไปกว่านั้น คุณสามารถมีรายการการขึ้นต่อกันที่มีความยาวหนึ่งไมล์ และกำหนดเวอร์ชันเฉพาะที่จะใช้สำหรับแต่ละเวอร์ชัน โดยใช้เวอร์ชัน semver และโอเปอเรเตอร์ช่วง นี่คือรายการคุณสมบัติเด่นอื่นๆ
"หลัก"
“main” กำหนดจุดเริ่มต้นของแอปพลิเคชันของคุณ ซึ่งมีค่าเริ่มต้นเป็น index.js ขึ้นอยู่กับแบบแผนหรือกรอบงานของคุณ อาจเป็น app.js หรือ main.js แน่นอน คุณสามารถทำอะไรก็ได้ที่คุณต้องการ
“สคริปต์”
นี่เป็นทรัพย์สินที่ประเมินราคาต่ำเกินไป
อย่างแรก สามารถใช้เพื่อทำสิ่งต่าง ๆ ในการเผยแพร่ล่วงหน้า
อย่างที่สอง มันเป็นสถานที่ที่คุณสามารถใช้นามแฝงของอาร์เรย์ของคำสั่งที่ใช้บ่อยได้ ตั้งแต่งานสร้าง (กำหนดในอึกหรือเสียงฮึดฮัด) ทริกเกอร์การติดตั้งการพึ่งพาอื่น ๆ (บางอย่างเช่น bower) การเริ่มต้นเซิร์ฟเวอร์การพัฒนาด้วย webpack หรือ เรียกใช้ชุดคำสั่งทุบตี
“การพึ่งพาอาศัยกัน”
คุณสมบัตินี้เป็นรายการแพ็คเกจที่แอปพลิเคชันของคุณต้องการ พร้อมด้วยหมายเลขเซเวอร์ที่เข้ากันได้ เป็นคุณสมบัติเด่นเพราะสามารถแก้ไขได้จากเทอร์มินัลเมื่อคุณติดตั้งแพ็คเกจในเครื่อง
ทำได้โดยการเพิ่ม --save (หรือชวเลข -S ) ที่ส่วนท้ายของคำสั่ง npm install
เมื่อคุณทำเช่นนี้ แพ็คเกจที่ติดตั้งใหม่จะถูกเพิ่มไปยังรายการการพึ่งพาในไฟล์ package.json ของคุณ
ในทำนองเดียวกัน การพึ่งพาสามารถลบออกได้โดยการเพิ่ม --save เมื่อรันคำสั่ง npm uninstall
สิ่งสำคัญคือต้องตระหนักถึงรูปแบบการกำหนดเวอร์ชันเซิร์ฟเวอร์ของแต่ละการขึ้นต่อกันและความหมายของมัน
หากกฎของเซิร์ฟเวอร์เข้มงวดเกินไป คุณจะสูญเสียคุณสมบัติและการปรับปรุงใหม่ๆ ในขณะที่หากกฎของเซิร์ฟเวอร์ผ่อนคลายเกินไป แพ็คเกจเวอร์ชันที่เสียหายก็สามารถติดตั้งตามบรรทัดได้
การติดตั้งแพ็กเกจที่เสียหายสามารถพิสูจน์ได้ว่าแก้ไขได้ยาก โดยเฉพาะอย่างยิ่งเมื่อใช้เวอร์ชันย่อของแพ็กเกจ
“การพึ่งพาการพัฒนา”
แยกจากคุณสมบัติการพึ่งพา คุณสมบัติ "devDependencies" ช่วยให้คุณสามารถกำหนดการอ้างอิงที่ใช้เฉพาะในระหว่างขั้นตอนการพัฒนาและไม่จำเป็นสำหรับบิลด์ที่ใช้งานจริง (เช่น ESLint แพ็คเกจ grunt-contrib และ Protractor) เช่นเดียวกับการพึ่งพา คุณสมบัตินี้สามารถแก้ไขได้จากเทอร์มินัลโดยการเพิ่ม --save-dev (หรือชวเลข -D ) ต่อท้ายคำสั่ง npm install หรือคำสั่ง npm uninstall ข้อควรระวังเดียวกันนี้ใช้กับการกำหนดเวอร์ชันตามที่กล่าวถึงภายใต้การพึ่งพา
“ถังขยะ”
นี่คือที่ที่คุณสามารถระบุไฟล์ปฏิบัติการของแพ็คเกจ เช่น พาธไปยังยูทิลิตี้ CLI คุณสมบัตินี้บอกให้ npm สร้าง symlink โลคัลหรือโกลบอลไปยังไฟล์เรียกทำงานของคุณเมื่อติดตั้งแพ็คเกจของคุณ
“กำหนดค่า”
ตามที่กล่าวไว้ก่อนหน้านี้ นี่คือที่ที่คุณกำหนดการตั้งค่าคอนฟิกูเรชันผ่านไฟล์ package.json ของคุณ
"ส่วนตัว"
เมื่อตั้งค่าเป็นจริง npm จะปฏิเสธที่จะเผยแพร่แพ็คเกจ
ไม่ควรสับสนกับการตั้งค่าการกำหนดค่าการเข้าถึง
นี่เป็นการตั้งค่าที่สะดวกมากเมื่อคุณมีโปรเจ็กต์ที่ใช้ npm ร่วมกับ package.json ของมัน แต่ไม่ได้ตั้งใจที่จะเผยแพร่ไปยังรีจิสตรี npm ทั้งแบบกำหนดขอบเขตหรือแบบสาธารณะ
หากความตั้งใจของคุณเปลี่ยนไป เพียงแค่เปลี่ยนการตั้งค่าเป็น "เท็จ" และคุณจะสามารถเผยแพร่แพ็คเกจของคุณได้
คุณสมบัติที่กำหนดเอง
ไฟล์ package.json ยังยอมรับคุณสมบัติที่กำหนดเอง ตราบใดที่ยังไม่ได้กำหนดหรือจองชื่อไว้
การพัฒนาแพ็คเกจ npm ของคุณเอง
ระบบนิเวศ npm นั้นเต็มไปด้วยแพ็คเกจที่เขียนโดยนักพัฒนาหลายพันรายทั่วโลก แต่ละคนแก้ปัญหาบางอย่าง นำเสนอสิ่งที่เป็นนามธรรม หรือนำเสนอการดำเนินการบางอย่าง
เป็นไปได้ว่าเมื่อถึงจุดหนึ่ง คุณยังต้องการพัฒนาแพ็คเกจของคุณเองเพื่อแชร์
ขั้นแรก คุณต้องสร้างไฟล์ package.json ด้วยคุณสมบัติขั้นต่ำที่จำเป็นของ “ชื่อ” และ “รุ่น” จากนั้นจึงสร้างคุณสมบัติ “หลัก” เพื่อระบุจุดเริ่มต้น เช่น index.js
เขียนรหัสของคุณในไฟล์ index.js นั้น เข้าสู่ระบบด้วยบัญชีผู้ใช้ npm ของคุณ หรือสร้างผู้ใช้ใหม่จากเทอร์มินัล และคุณพร้อมที่จะเผยแพร่ไปยังรีจิสทรี npm
แพ็คเกจสามารถเป็นสาธารณะหรือส่วนตัวได้
แพ็คเกจสาธารณะมีอิสระในการเผยแพร่และพร้อมให้ทุกคนนำไปใช้
แพ็คเกจส่วนตัว เรียกว่าแพ็คเกจที่มีขอบเขต สามารถเผยแพร่ได้ก็ต่อเมื่อคุณจ่ายผู้ใช้โมดูลส่วนตัว และสามารถระบุได้ด้วย @username/ ที่แตกต่างกันซึ่งต่อท้ายชื่อแพ็คเกจ
แพ็คเกจที่มีขอบเขตสามารถเผยแพร่สู่สาธารณะได้ด้วยการเรียกคำสั่ง publish ด้วย --access=public
นอกจากนี้ หากคุณใช้เวลามากขึ้นในการขยายและปรับปรุงฐานรหัสของแพ็คเกจ และถึงเวลาสำหรับการเผยแพร่เวอร์ชันใหม่ คุณเพียงแค่เปลี่ยนเวอร์ชัน (ตามกฎและแบบแผนของเซิร์ฟเวอร์) ของแพ็คเกจใน package.json ไฟล์และพิมพ์ npm publish
คุณยังสามารถใช้อินเทอร์เฟซบรรทัดคำสั่งและเรียก npm version <update_type> โดยที่ update_type เป็น patch , minor หรือ major ตามที่อธิบายโดย semver จากนั้นจะเพิ่มหมายเลขเวอร์ชันในไฟล์ package.json โดยอัตโนมัติ
npm องค์กร
อีกครั้ง เอกสารประกอบของ npm สำหรับสิ่งนี้นั้นยอดเยี่ยม และมันก็ไร้ประโยชน์ที่จะพูดซ้ำคำของพวกเขา
สิ่งที่สามารถพูดได้เกี่ยวกับองค์กรในบริบทของ npm คือมีความละเอียดรอบคอบอย่างยิ่ง และเมื่อจัดการอย่างถูกต้อง ทีมและบุคคลขนาดใหญ่ที่ทำงานบนแพ็คเกจที่มีขอบเขตหรือสาธารณะภายใต้ชื่อเดียว ก็สามารถจัดการและจำกัดได้เป็นอย่างดี
แม้ว่าจะเป็นเรื่องยากที่จะเชี่ยวชาญ แต่ก็คุ้มค่ามาก
พลังของnpm
ในท้ายที่สุด เอกสารที่ npm ให้มานั้นกว้างขวางและควรได้รับการพิจารณาเฉพาะเจาะจง แต่บทความนี้ให้ภาพรวมที่เป็นประโยชน์ของฟังก์ชันการทำงานที่เกี่ยวข้องทั้งแบบพื้นฐานและขั้นสูงที่เกี่ยวข้อง ซึ่งแสดงถึงความยอดเยี่ยมของ npm
เช่นเดียวกับทุกสิ่ง ความคิดเห็นที่แข็งแกร่งมีอยู่และสามารถพบข้อผิดพลาดได้มากมาย แต่ถ้าคุณไม่เคยลอง npm (หรือโหนดสำหรับเรื่องนั้น) ให้ดำดิ่งและสำรวจด้วยตัวคุณเอง โอกาสที่คุณจะสนุกกับมันมากกว่าที่คุณคิด
สำหรับบทความที่น่าสนใจเพิ่มเติมเกี่ยวกับ npm ให้ลองอ่าน การใช้ Scala.js กับ npm และ Browserify
