Cách dễ dàng để liệt kê các mô-đun nút mà tôi đã liên kết npm?


123

Tôi đang tìm một lệnh sẽ liệt kê tên của các mô-đun toàn cục mà tôi có npm linkcho các bản sao cục bộ, cũng liệt kê đường dẫn cục bộ.

Trên thực tế, một danh sách tất cả các mô-đun được cài đặt toàn cầu sẽ còn tốt hơn nữa, với những cái npm link'd được gắn cờ bằng cách nào đó.


1
npm -g lsnên liệt kê tất cả các module toàn cầu, nhưng tôi không biết module nếu nó liệt kê liên kết
Ferdi265

duy trì tệp "package.json" cho ứng dụng của bạn
CM

1
@CeeAim Tôi có rất nhiều ứng dụng với rất nhiều package.jsons, tôi cũng có khá nhiều mô-đun toàn cục cho các mục đích khác như CLI, và nhiều mô-đun được chia nhỏ và npm link'd. Tôi cần một cách để theo dõi.
callum

Câu trả lời:


64

Bạn đã thử chỉ liệt kê node_modulesnội dung thư mục (ví dụ ls -l node_modules | grep ^l)? Chúng là những liên kết tượng trưng bình thường.

Nếu bạn thực sự cần tìm tất cả các liên kết tượng trưng, ​​bạn có thể thử một cái gì đó như find / -type d -name "node_modules" 2>/dev/null | xargs -I{} find {} -type l -maxdepth 1 | xargs ls -l.


16
Không hoạt động với các mô-đun không gian tên được liên kết cục bộ (@ namespace / moduleName). Một giải pháp tàn bạo có thể là:( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l
Andrea Carraro

2
Giải pháp này không hoạt động trên Windows (cũng như bất kỳ giải pháp nào khác).
Micah Zoltu

2
@MicahZoltu Nó sẽ làm việc trên Windows nếu bạn sử dụng các thiết bị đầu cuối bash Git
Greg M.

1
Đối với các gói @scoped, chỉ cần thêm -R để lệnh ls:ls -l -R ./node_modules | grep ^l
Romasato

Tôi tìm thấy câu trả lời bên dưới phù hợp với tôi stackoverflow.com/a/48593067/7491536
Jack Howard

195

Để liệt kê tất cả các mô-đun được liên kết toàn cầu, điều này hoạt động (tài liệu https://docs.npmjs.com/cli/ls ):

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

Tuy nhiên, trước tiên tôi phải cập nhật phiên bản npm trên máy của mình:

npm install npm@latest -g

15
Được ủng hộ vì là giải pháp đơn giản nhất và hoạt động trong Windows. Ước gì tôi có thể ủng hộ điều này nhiều hơn một lần.
Artif3x

Cái đầu tiên hoạt động w / o --link=true. Môi trường của tôi: Win10, NVM = 1.1.7, Node hiện tại = 8.14.0
Jeb50

1
và để xóa một trong số đó được liệt kê:npm unlink <package> -g
zamnuts

@ Jeb50 có ý nghĩa, vì các gói liên kết được cài đặt trên toàn cầu.
kas

20

Một thay thế tốt hơn cho phân tích cú pháp lslà sử dụng findnhư sau:

find . -type l

Bạn có thể sử dụng -maxdepth 1để chỉ xử lý cấp thư mục đầu tiên:

find . -maxdepth 1 -type l

Bạn có thể sử dụng -lsđể biết thêm thông tin.

Ví dụ: để tìm các mô-đun nút được liên kết npm:

find node_modules -maxdepth 1 -type l -ls

Đây là bài viết tại sao phân tích cú pháp lskhông phải là ý tưởng tốt nhất


Điều này rất hữu ích cho tôi — cảm ơn :) Gist: gist.github.com/ryanve/5e28670dc459a4f83955b20f31b3a9e0
ryanve

13

Nếu bạn muốn đầu ra có màu đẹp npm list, bạn có thể thích:

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

mang lại cho sân chơi hiện tại của tôi dir:

+-- 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 

Nó đưa ra một vài giả định nhưng nó sẽ hoạt động trong hầu hết các trường hợp, hoặc dễ dàng thích ứng với những giải thích bên dưới.

  • sử dụng \lsđể bỏ qua các bí danh có thể có trong lslệnh của bạn
  • các -Ftùy chọn bổ sung thêm một '@' chỉ cho các liên kết
  • các sedlệnh chọn các liên kết này và loại bỏ các chỉ số
  • các xargsphần đi ra trước như các đối số đểnpm ...
  • npm được gọi với
    • listhoặc lsliệt kê các mô-đun với các phiên bản
      • thay thế bằng llđể biết chi tiết về từng mô-đun được liệt kê.
    • -g cho các mô-đun toàn cầu và
    • --depth 0 cho một danh sách nông (tùy chọn)
    • --long false (mặc định với 'danh sách').

Vấn đề: vì một số lý do npm cung cấp các mục không liên quan cho tôi vào lúc này (không có màu). Họ sẽ là những người tôi đã " npm hủy liên kết " ed.

Đối với " danh sách tất cả các mô-đun được cài đặt toàn cầu " trong đường dẫn npm hiện tại, bạn chỉ cần làm

npm list -g

Đối với các nhu cầu khác, bạn có thể muốn xem

npm help folders

Bạn không thể theo dõi ngược lại các liên kết tượng trưng trừ khi bạn quét toàn bộ hệ thống tệp của mình và (sau đó đó không phải là câu hỏi cụ thể về npm).

Để nhanh chóng tìm kiếm các tệp và thư mục theo tên, tôi sử dụng cách locatenày hoạt động trên một chỉ mục được tạo lại thường một lần mỗi ngày.

locate '*/node_modules'

và bắt đầu làm việc từ đó (bạn có thể muốn tinh chỉnh tìm kiếm với --regexptùy chọn.


Tôi sử dụng mà không cần -glấy các liên kết phụ thuộc thoáng qua cục bộ / gần nhất của mình. Cảm ơn!
kross

4

Tôi đã tìm thấy câu hỏi này sau khi tôi cũng đã viết công cụ của riêng mình, đây là công cụ hoàn chỉnh: npm-list-linked .

Nó cũng sẽ tuân theo một cách đệ quy tất cả các gói được liên kết trong hệ thống phân cấp, trong công việc của tôi, đôi khi chúng tôi có thể có npm link2-3 cấp sâu và bằng cách này, bạn có thể thấy chính xác cái nào là cục bộ và cái nào không, tránh bị bất ngờ.

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

2

Tôi đã tạo một mô-đun Node.js dùng fsđể kiểm tra các liên kết tượng trưng được tạo bởi npm linkhoặc cách khác.

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

var symlinked = require("symlinked")

console.log(symlinked.names())

2
Sẽ thực sự thú vị nếu bạn thêm tệp thực thi CLI cho việc này, đặc biệt là trong điều kiện medium.com/@maybekatz/… . Hầu hết các trường hợp sử dụng để tìm các gói được liên kết tượng trưng là từ CLI.
cchamberlain

không thể phát hiện bất kỳ liên kết nào vì một số lý do :(
JacopKane

@cchamberlain, bạn có thể chỉ cho tôi công cụ CLI tốt để lập mô hình API sau không? Hoặc chắc chắn vui lòng đóng góp một lệnh cli vào github.com/ryanve/symlinked :)
ryanve

@JacopKane Bạn có thể đăng sự cố trên github.com/ryanve/symlinked/issues/new kèm theo chi tiết không?
ryanve

1
@ryanve - done github.com/ryanve/symlinked/pull/1 - Tôi cũng đã thêm hỗ trợ gói phạm vi vì điều đó không hoạt động. Kudos về cấu trúc đơn giản! :)
cchamberlain

1

Tôi thấy mình và những người khác có cùng câu hỏi này rất nhiều. Tôi đã viết một CLI nhỏ cho chính mình được gọi là link-statusđể hiển thị thông tin này, nó cũng có thể giúp ích cho những người khác! Kiểm tra nó ra ở đây!


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

để hiển thị các liên kết toàn cầu, bao gồm các gói không gian tên.

Câu trả lời của @ andrew đôi khi hoạt động:

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

nhưng đã gây ra lỗi cho bạn bè ngang hàng đối với tôi trong một số trường hợp. Hy vọng rằng sẽ giúp một ai đó!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.