คู่มือ 2 เล่มเกี่ยวกับgulpบอกว่าฉันต้องติดตั้ง gulp ก่อนทั่วโลก (ด้วยแฟล็ก -g) จากนั้นอีกครั้งในเครื่อง ทำไมฉันต้องการสิ่งนี้
คู่มือ 2 เล่มเกี่ยวกับgulpบอกว่าฉันต้องติดตั้ง gulp ก่อนทั่วโลก (ด้วยแฟล็ก -g) จากนั้นอีกครั้งในเครื่อง ทำไมฉันต้องการสิ่งนี้
คำตอบ:
เมื่อติดตั้งเครื่องมือทั่วโลกผู้ใช้ต้องใช้เป็นยูทิลิตี้บรรทัดคำสั่งได้ทุกที่รวมถึงนอกโครงการโหนด การติดตั้งโกลบอลสำหรับโปรเจ็กต์โหนดไม่ดีเนื่องจากทำให้การปรับใช้ยากขึ้น
npxยูทิลิตี้ที่มาพร้อมกับnpm 5.2แก้ปัญหานี้ได้ ด้วยคุณสามารถเรียกใช้ยูทิลิตี้ที่ติดตั้งในท้องถิ่นเช่นยูทิลิตี้ที่ติดตั้งทั่วโลก (แต่คุณต้องเริ่มต้นคำสั่งด้วยnpx) ตัวอย่างเช่นหากคุณต้องการเรียกใช้การติดตั้งในeslintเครื่องคุณสามารถทำได้:
npx eslint .
เมื่อใช้ในscriptฟิลด์ของ package.json ของคุณnpmค้นหาnode_modulesเครื่องมือรวมถึงโมดูลที่ติดตั้งทั่วโลกดังนั้นการติดตั้งในระบบก็เพียงพอแล้ว
ดังนั้นหากคุณพอใจ (ใน package.json ของคุณ):
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
ฯลฯ และทำงานด้วยnpm run testแล้วคุณไม่จำเป็นต้องติดตั้งทั่วโลกเลย
ทั้งสองวิธีมีประโยชน์ในการทำให้ผู้คนติดตั้งโครงการของคุณเนื่องจากsudoไม่จำเป็น มันก็หมายความว่าgulpจะมีการอัปเดตเมื่อเวอร์ชันถูกชนใน package.json ดังนั้นทุกคนจะใช้เวอร์ชันเดียวกันของ gulp เมื่อพัฒนากับโครงการของคุณ
ปรากฏว่าอึกมีพฤติกรรมที่ผิดปกติบางอย่างเมื่อใช้ทั่วโลก เมื่อใช้เป็นการติดตั้งทั่วโลกอึกหาอึกติดตั้งในท้องถิ่นที่จะผ่านการควบคุมไป ดังนั้นการติดตั้งแบบ gulp แบบโกลบอลจึงจำเป็นต้องใช้การติดตั้งแบบ gulp ในเครื่องเพื่อให้ทำงานได้ คำตอบข้างต้นยังคงยืนอยู่ การติดตั้งในเครื่องมักจะเหมาะสมกว่าการติดตั้งทั่วโลก
./node_modules/.bin/gulpแล้วใช้
gulpและcoffeeคำสั่งทำงานจากรูทโปรเจ็กต์โหนดของฉัน (เช่น. alias gulp="node_modules/.bin/gulp") วิธีนี้คำสั่งจะใช้งานง่ายหากจำเป็นและไม่เกิดข้อขัดแย้งกับเวอร์ชันสากล / โลคัล
gulp Local gulp not found in ...เท่าที่ฉันเข้าใจมันควรดูที่ node_modules โลคัลก่อนและหากไม่พบควรตรวจดูโมดูลที่ติดตั้งทั่วโลกใช่มั้ย ขอบคุณ!
TLDR; นี่คือเหตุผล :
ด้วยเหตุนี้การทำงานเป็นเพราะ
gulpพยายามที่จะทำงานของคุณgulpfile.jsโดยใช้รุ่นของคุณติดตั้งภายในของgulpดูที่นี่ ดังนั้นเหตุผลสำหรับการติดตั้งอึกทั่วโลกและในท้องถิ่น
เป็นหลักเมื่อคุณติดตั้งgulpภายในสคริปต์ไม่ได้อยู่ในของคุณPATHและเพื่อให้คุณไม่สามารถพิมพ์gulpและคาดว่าเชลล์เพื่อหาคำสั่ง ด้วยการติดตั้งทั่วโลกgulpสคริปต์จะเข้าสู่คุณPATHเพราะnode/bin/ไดเรกทอรีทั่วโลกมีแนวโน้มมากที่สุดในเส้นทางของคุณ
จะเคารพการอ้างอิงในท้องถิ่นของคุณแม้ว่าจะใช้รุ่นที่ติดตั้งไว้ในเครื่องของคุณเองในการทำงานgulpgulpfile.js
gulpคือแพคเกจที่ติดตั้งทั่วโลกของคุณจำเป็นต้องใส่node_modules/.bin/gulpในเส้นทาง การจัดเก็บราคาถูก แต่ทิ้ง MB สำหรับการจำลอง symlink นั้นเป็น IMO ที่ไม่เลอะเทอะ
คุณสามารถเชื่อมโยงการติดตั้งทั่วโลกgulpในพื้นที่ด้วย
npm link gulp
npm linkสำหรับการกล่าวขวัญ
คำถาม " ทำไมเราต้องติดตั้งอึกทั่วโลกและในประเทศ? " สามารถแบ่งออกเป็นสองคำถามต่อไปนี้:
ทำไมฉันต้องติดตั้งอึกไว้ในเครื่องหากฉันติดตั้งไว้แล้วทั่วโลก
ทำไมฉันต้องติดตั้งอึกทั่วโลกหากฉันติดตั้งไว้ในเครื่องแล้ว
หลายคนให้คำตอบที่ดีกับคำถามที่แยกกัน แต่ฉันคิดว่ามันจะเป็นประโยชน์ในการรวบรวมข้อมูลในคำตอบแบบรวม
ทำไมฉันต้องติดตั้งอึกไว้ในเครื่องหากฉันติดตั้งไว้แล้วทั่วโลก
เหตุผลในการติดตั้งอึกภายในนั้นประกอบด้วยหลายสาเหตุ:
ทำไมฉันต้องติดตั้งอึกทั่วโลกหากฉันติดตั้งไว้ในเครื่องแล้ว
เพื่อหลีกเลี่ยงการติดตั้งภายในคุณสามารถใช้npm link [package]แต่คำสั่งลิงค์รวมทั้งinstall --globalคำสั่งดูเหมือนจะไม่สนับสนุน--save-devตัวเลือกซึ่งหมายความว่าดูเหมือนจะไม่เป็นวิธีที่ง่ายในการติดตั้งอึกทั่วโลกแล้วเพิ่มเวอร์ชันใดก็ได้ที่ต้องการ ไฟล์ package.json ท้องถิ่นของคุณ
ในที่สุดฉันเชื่อว่ามันมีความเหมาะสมมากกว่าที่จะมีตัวเลือกในการใช้โมดูลระดับโลกเพื่อหลีกเลี่ยงการติดตั้งเครื่องมือทั่วไปในทุกโครงการของคุณโดยเฉพาะในกรณีของเครื่องมือในการพัฒนาเช่น grunt, gulp, jshint เป็นต้น ดูเหมือนว่าคุณจะต้องต่อสู้กับเครื่องมือสักเล็กน้อยเมื่อคุณต่อสู้กับธัญพืช
ในทางเทคนิคคุณไม่จำเป็นต้องติดตั้งทั่วโลกหากnode_modulesโฟลเดอร์ในการติดตั้งในเครื่องของคุณอยู่ในPATHเครื่อง โดยทั่วไปนี่ไม่ใช่ความคิดที่ดี
อีกทางเลือกหนึ่งถ้าnpm testอ้างอิงgulpแล้วคุณสามารถพิมพ์npm testและมันจะเรียกใช้อึกท้องถิ่น
ฉันไม่เคยติดตั้งอึกทั่วโลก - ฉันคิดว่ามันเป็นฟอร์มที่ไม่ดี
ฉันไม่แน่ใจว่าปัญหาของเราเกี่ยวข้องโดยตรงกับการติดตั้งอึกเฉพาะที่หรือไม่ แต่เราต้องติดตั้งเครือข่ายของเราเอง สิ่งนี้นำไปสู่แพ็คเกจ "huge" เราต้องทำเพราะสภาพแวดล้อมการสร้างของเรา แต่ฉันจะไม่แนะนำให้ติดตั้งอึกไม่ได้ทั่วโลกหากไม่จำเป็นจริงๆ เราประสบปัญหาที่คล้ายกันดังอธิบายในบล็อกโพสต์ต่อไปนี้
ไม่มีปัญหาใด ๆ เกิดขึ้นสำหรับนักพัฒนาซอฟต์แวร์ของเราในเครื่องของพวกเขาเพราะพวกเขาติดตั้งอึกทั่วโลก ในระบบการสร้างเรามีปัญหาที่อธิบายไว้ หากมีใครสนใจฉันสามารถดำดิ่งลงสู่ปัญหานี้ได้ แต่ตอนนี้ฉันแค่อยากจะพูดถึงว่ามันไม่ใช่เรื่องง่ายที่จะติดตั้งอึกในเครื่องเท่านั้น
เพียงเพราะฉันไม่ได้เห็นที่นี่ถ้าคุณอยู่ใน MacOS หรือ Linux ฉันขอแนะนำให้คุณเพิ่มสิ่งนี้ลงใน PATH ของคุณ (ใน bashrc ของคุณ ฯลฯ ):
node_modules/.bin
ด้วยรายการพา ธ สัมพัทธ์นี้หากคุณนั่งอยู่ในโฟลเดอร์รูทของโปรเจ็กต์โหนดคุณสามารถรันเครื่องมือบรรทัดคำสั่งใดก็ได้ (eslint, gulp, ฯลฯ ) โดยไม่ต้องกังวลกับ "global installs" หรือnpm runอื่น ๆ
เมื่อฉันทำสิ่งนี้ฉันไม่เคยติดตั้งโมดูลทั่วโลก