คู่มือ 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/
ไดเรกทอรีทั่วโลกมีแนวโน้มมากที่สุดในเส้นทางของคุณ
จะเคารพการอ้างอิงในท้องถิ่นของคุณแม้ว่าจะใช้รุ่นที่ติดตั้งไว้ในเครื่องของคุณเองในการทำงานgulp
gulpfile.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
อื่น ๆ
เมื่อฉันทำสิ่งนี้ฉันไม่เคยติดตั้งโมดูลทั่วโลก