วิธีง่ายๆในการแสดงรายการโมดูลโหนดที่ฉันเชื่อมโยงกับ npm?


123

ฉันกำลังมองหาคำสั่งที่จะแสดงชื่อของโมดูลส่วนกลางที่ฉันมีnpm linkให้กับสำเนาในเครื่องรวมถึงแสดงรายการพา ธ ภายในเครื่องด้วย

ในความเป็นจริงรายการทั้งหมดโมดูลที่ติดตั้งทั่วโลกจะดียิ่งขึ้นด้วยnpm link'd คนที่ถูกตั้งค่าสถานะอย่างใด


1
npm -g lsควรแสดงรายการโมดูลส่วนกลางทั้งหมด แต่ฉันไม่รู้ว่ามันแสดงรายการโมดูลที่เชื่อมโยงหรือไม่
Ferdi265

รักษาไฟล์ "package.json" สำหรับแอปพลิเคชันของคุณ
CM

1
@CeeAim ฉันมีแอปพลิเคชั่นมากมายที่มี package.jsons มากมายฉันยังมีโมดูลระดับโลกอยู่ไม่กี่โมดูลสำหรับวัตถุประสงค์อื่น ๆ เช่น CLI และอีกมากมายถูกแยกและnpm link'd. ฉันต้องการวิธีติดตาม
callum

คำตอบ:


64

คุณลองแสดงรายการnode_modulesเนื้อหาไดเรกทอรี (เช่นls -l node_modules | grep ^l) หรือไม่? พวกเขาเป็น symlink ปกติ

ถ้าคุณต้องการจริงๆที่จะหาทั้งหมด symlinks, find / -type d -name "node_modules" 2>/dev/null | xargs -I{} find {} -type l -maxdepth 1 | xargs ls -lคุณอาจจะลองสิ่งที่ต้องการ


17
ไม่ทำงานกับโมดูลเนมสเปซที่เชื่อมโยงภายใน (@ namespace / moduleName) วิธีแก้ปัญหาที่โหดร้ายอาจเป็น:( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l
Andrea Carraro

2
โซลูชันนี้ใช้ไม่ได้กับ Windows (หรือใช้วิธีแก้ปัญหาอื่น ๆ )
Micah Zoltu

2
@MicahZoltu มันจะทำงานบน Windows ถ้าคุณใช้ Git bash terminal
Greg M.

1
สำหรับแพ็คเกจ @scoped เพียงเพิ่ม -R ในคำสั่ง ls:ls -l -R ./node_modules | grep ^l
Romasato

ฉันพบคำตอบด้านล่างเพื่อทำงานให้ฉันstackoverflow.com/a/48593067/7491536
Jack Howard

196

หากต้องการแสดงรายการโมดูลที่เชื่อมโยงทั่วโลกทั้งหมดนี้ใช้งานได้ (เอกสารประกอบhttps://docs.npmjs.com/cli/ls ):

npm ls -g --depth=0 --link=true

ฉันต้องอัปเดตเวอร์ชันของ npm บนเครื่องของฉันก่อนแม้ว่า:

npm install npm@latest -g

15
ได้รับการโหวตให้เป็นโซลูชันที่ง่ายที่สุดและทำงานใน Windows หวังว่าฉันจะโหวตให้คะแนนมากกว่าหนึ่งครั้ง
Artif3x

1 หนึ่งผลงาน w / --link=trueo สภาพแวดล้อมของฉัน: Win10, NVM = 1.1.7, โหนดปัจจุบัน = 8.14.0
Jeb50

1
และเพื่อลบรายการที่อยู่ในรายการ:npm unlink <package> -g
zamnuts

@ Jeb50 ที่สมเหตุสมผลเนื่องจากแพ็คเกจที่เชื่อมโยงได้รับการติดตั้งทั่วโลก
KAS

20

ทางเลือกที่ดีกว่าในการแยกวิเคราะห์lsคือการใช้findดังนี้:

find . -type l

คุณสามารถใช้-maxdepth 1เพื่อประมวลผลระดับไดเร็กทอรีแรกเท่านั้น:

find . -maxdepth 1 -type l

คุณสามารถใช้-lsสำหรับข้อมูลเพิ่มเติม

ตัวอย่างเช่นสำหรับการค้นหาโมดูลโหนดที่เชื่อมโยงกับ npm:

find node_modules -maxdepth 1 -type l -ls

นี่คือบทความว่าทำไมการแยกวิเคราะห์lsไม่ใช่ความคิดที่ดีที่สุด


สิ่งนี้มีประโยชน์สำหรับฉัน - ขอบคุณ :) Gist: gist.github.com/ryanve/5e28670dc459a4f83955b20f31b3a9e0
ryanve

13

หากคุณต้องการผลลัพธ์ที่มีสีสันสวยงามnpm listคุณอาจต้องการ:

\ls -F node_modules | sed -n 's/@$//p' | xargs npm ls -g --depth 0

ซึ่งให้ในสนามเด็กเล่นปัจจุบันของฉัน:

+-- color@0.11.1 
+-- grunt@0.4.5
+-- http-server@0.8.5 
+-- jsdom@8.0.2 
+-- jsonfile@2.2.3 
+-- underscore@1.8.3 
+-- xmlserializer@0.3.3 
`-- zombie@4.2.1 

มันทำให้เกิดข้อสันนิษฐานเล็กน้อย แต่ควรใช้งานได้ในกรณีส่วนใหญ่หรือปรับเปลี่ยนได้ง่ายด้วยคำอธิบายด้านล่าง

  • ใช้\lsเพื่อข้ามนามแฝงที่เป็นไปได้ในlsคำสั่งของคุณ
  • -Fตัวเลือกเพิ่ม '@' ตัวบ่งชี้สำหรับการเชื่อมโยง
  • sedคำสั่งเลือกการเชื่อมโยงเหล่านั้นและเอาตัวบ่งชี้
  • xargsส่วนหนึ่งผ่านการส่งออกก่อนหน้านี้เป็นข้อโต้แย้งที่จะnpm ...
  • npm ถูกเรียกใช้ด้วย
    • listหรือlsเพื่อแสดงรายการโมดูลที่มีเวอร์ชัน
      • แทนที่ด้วยllเพื่อรับรายละเอียดเกี่ยวกับโมดูลที่แสดงแต่ละรายการ
    • -g สำหรับโมดูลส่วนกลางและ
    • --depth 0 สำหรับรายชื่อตื้น ๆ (ไม่บังคับ)
    • --long false (ค่าเริ่มต้นด้วย 'รายการ')

ปัญหา:ด้วยเหตุผลบางประการnpmให้รายการที่ไม่เกี่ยวข้องสำหรับฉันในขณะนี้ (ไม่มีสี) พวกเขาจะเป็นคนที่ฉัน " ยกเลิกการลิงก์ npm "

สำหรับ " รายการโมดูลทั้งหมดที่ติดตั้งทั่วโลก " ในเส้นทาง npm ปัจจุบันคุณเพียงแค่ทำ

npm list -g

สำหรับความต้องการเพิ่มเติมคุณอาจต้องการดู

npm help folders

คุณไม่สามารถติดตาม symlinks ย้อนหลังได้เว้นแต่คุณจะสแกนระบบไฟล์ทั้งหมดของคุณและ (นั่นไม่ใช่คำถามเฉพาะของ npm)

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

locate '*/node_modules'

และเริ่มทำงานจากที่นั่น (คุณอาจต้องการปรับแต่งการค้นหาด้วย--regexpตัวเลือก


ฉันใช้โดยไม่-gได้รับลิงก์อ้างอิงชั่วคราวในพื้นที่ / ที่ใกล้ที่สุด ขอบคุณ!
kross

4

ผมพบว่าคำถามนี้หลังจากที่ผมยังเขียนเครื่องมือของตัวเองที่นี่มันเป็นความสมบูรณ์: NPM รายการที่เชื่อมโยง

มันจะติดตามแพ็กเกจที่เชื่อมโยงซ้ำ ๆ ตามลำดับชั้นเช่นกันในงานของฉันบางครั้งเราอาจมีnpm link2-3 ระดับที่ลึกและด้วยวิธีนี้คุณจะเห็นได้ว่าสิ่งใดอยู่ในท้องถิ่นและสิ่งที่ไม่ใช่เพื่อหลีกเลี่ยงความประหลาดใจ

$ npm-list-linked
Linked packages in /home/user/projects/some-project/
    @prefix/package 0.2.7
        other-package 0.1.2

2

ฉันสร้างโมดูล Node.js ที่ใช้fsตรวจสอบ symlink ที่สร้างโดยnpm linkหรืออย่างอื่น

https://www.npmjs.com/package/symlinked

var symlinked = require("symlinked")

console.log(symlinked.names())

2
จะหวานจริงๆถ้าคุณเพิ่มปฏิบัติการ CLI สำหรับการนี้โดยเฉพาะอย่างยิ่งในแง่ของmedium.com/@maybekatz/... กรณีการใช้งานส่วนใหญ่ที่ต้องการค้นหาแพ็คเกจที่เชื่อมโยงกันนั้นมาจาก CLI
cchamberlain

ไม่พบลิงก์ใด ๆ ด้วยเหตุผลบางประการ :(
JacopKane

@cchamberlain คุณช่วยชี้ให้ฉันเห็นเครื่องมือ CLI ที่ดีเพื่อสร้างโมเดล API ได้ไหม หรือ
อย่าลังเลที่

@JacopKane คุณสามารถโพสต์ปัญหาบนgithub.com/ryanve/symlinked/issues/newพร้อมรายละเอียดได้หรือไม่?
ryanve

1
@ryanve - เสร็จแล้วgithub.com/ryanve/symlinked/pull/1 - ฉันยังเพิ่มการรองรับแพ็กเกจที่กำหนดขอบเขตเนื่องจากไม่ได้ผล ความรุ่งโรจน์ในโครงสร้างที่เรียบง่าย! :)
cchamberlain

1

ฉันเห็นตัวเองและคนอื่น ๆ มีคำถามเดียวกันนี้มาก ฉันเขียน CLI เล็ก ๆ สำหรับตัวเองlink-statusเพื่อแสดงข้อมูลนี้มันอาจช่วยคนอื่นได้เช่นกัน! ตรวจสอบได้ที่นี่!


0
find `npm root -g` -maxdepth 2 -type l

เพื่อแสดงลิงก์ส่วนกลางรวมถึงแพ็คเกจเนมสเปซ

คำตอบของ @ andrew ใช้ได้ผลบางครั้ง:

npm ls -g --depth=0 --link=true

แต่เกิดข้อผิดพลาดเกี่ยวกับ peer dep สำหรับฉันในบางครั้ง หวังว่าจะช่วยใครสักคน!

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