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
: เราจะเข้าสู่ตัวเลือกการกำหนดค่าต่างๆ ในภายหลัง แต่คำสั่งนี้เกี่ยวข้องกับคุณสมบัติการกำหนดค่าที่คงอยู่เป็นหลักในไฟล์การกำหนดค่าภายในหรือส่วนกลางโดยใช้คำสั่งย่อยset
get
หรือdelete
dedupe
หรือ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 the
file. For example,
package.jsonfile. For example,
npm install lodash` จะเพิ่ม lodash ให้กับการอ้างอิงของคุณsave-dev
: คล้ายกับตัวเลือกบันทึกการกำหนดค่า ให้เพิ่ม--save-dev
เมื่อติดตั้งแพ็คเกจ จากนั้นจะถูกเพิ่มไปยังตัวเลือก devDependencies ในไฟล์package.json
save-optional
: คล้ายกับตัวเลือกบันทึกการกำหนดค่า ให้เพิ่ม--save-optional
เมื่อติดตั้งแพ็คเกจ จากนั้นจะถูกเพิ่มไปยังตัวเลือก optionalDependencies ในไฟล์package.json
save-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