In danh sách tất cả các mô-đun node.js đã cài đặt


134

Trong tập lệnh node.js mà tôi đang làm việc, tôi muốn in tất cả các mô-đun node.js (được cài đặt bằng npm) vào dòng lệnh. Tôi có thể làm cái này như thế nào?

console.log(__filename);

//now I want to print all installed modules to the command line. How can I do this?

Trong trường hợp này, có thể hữu ích khi viết một hàm trả về đường dẫn của thư mục mô-đun node.js (nếu có thể). Một giải pháp đa nền tảng sẽ là lý tưởng.
Anderson Green

Thông tin về việc nhận danh sách các tệp từ một thư mục: stackoverflow.com/questions/2727167/ Khăn
Anderson Green

Câu trả lời:


100

Sử dụng npm ls (thậm chí có đầu ra json)

Từ kịch bản:

test.js:

function npmls(cb) {
  require('child_process').exec('npm ls --json', function(err, stdout, stderr) {
    if (err) return cb(err)
    cb(null, JSON.parse(stdout));
  });
}
npmls(console.log);

chạy:

> node test.js
null { name: 'x11', version: '0.0.11' }

Ngoài ra, làm thế nào bạn có thể có được đường dẫn tệp của thư mục mô-đun?
Anderson Green

đường dẫn sẽ là node_modules / [tên mô-đun]. Tôi tin rằng điều này sẽ làm việc trên tất cả các nền tảng. Lưu ý rằng cách này chỉ in cây mô-đun 'cục bộ' và requrelần đầu tiên nhìn vào node_modules, sau đó ../node_modules, ../../node_modules (xem nodejs.org/api/ mật ) và sau đó từ NODE_PATH env var
Andrey Sidorov

4
hãy thử npm ls --parseablechỉ danh sách các đường dẫn
Andrey Sidorov

262

Nếu bạn chỉ quan tâm đến các gói được cài đặt trên toàn cầu mà không có TREE đầy đủ thì:

npm -g ls --depth=0

hoặc cục bộ (bỏ qua -g):

npm ls --depth=0


6
Tôi thích chỉ định --l hoặc --long là tốt npm -g ls --depth=0 --long. Điều này cung cấp các mô tả mô-đun và các liên kết github.
Adam Caviness

nếu bạn thích các npm lsví dụ đầy đủ, hãy kiểm tra điều này: stackoverflow.com/questions/17937960/
Kẻ

48

danh sách tất cả các mô-đun bên thứ ba được cài đặt trên toàn cầu, ghi vào bảng điều khiển:

 npm -g ls

28

trong bất kỳ hệ điều hành

npm -g list

và đó là nó


4
Lệnh này sẽ mất nhiều thời gian hơn npm -g ls --depth=0, bởi vì nó cũng sẽ tìm kiếm các phụ thuộc mô-đun.
Paul Razvan Berg

9

Nói chung, có hai cách để liệt kê các gói đã cài đặt - thông qua Giao diện dòng lệnh ( CLI ) hoặc trong ứng dụng của bạn bằng API .

Cả hai lệnh sẽ in cho stdouttất cả các phiên bản của các gói được cài đặt, cũng như các phụ thuộc của chúng, trong một cấu trúc cây.


CLI

npm list

Sử dụng -gcờ (toàn cầu) để liệt kê tất cả các gói được cài đặt toàn cầu. Sử dụng --depth=0cờ để liệt kê chỉ các gói hàng đầu và không phụ thuộc vào chúng.


API

Trong trường hợp của bạn, bạn muốn chạy cái này trong tập lệnh của mình, vì vậy bạn cần sử dụng API. Từ các tài liệu:

npm.commands.ls(args, [silent,] callback)

Ngoài việc in ra stdout, dữ liệu cũng sẽ được chuyển vào cuộc gọi lại.


Cảm ơn bạn đã chỉ định rằng npm có API có thể truy cập từ các ứng dụng. Làm thế nào để bạn truyền đối số cho các chức năng? Tôi đã thử npm.commands.ls(["depth=0"], ... )nhưng nó cho tôi lỗi và npm.commands.ls(["prod"], ... )cho tôi một mảng trống ....
Giuliano Collacchioni

6

Tại sao không lấy chúng từ dependenciestrong package.json?

Tất nhiên, điều này sẽ chỉ cung cấp cho bạn những người bạn thực sự đã lưu, nhưng dù sao bạn cũng nên làm điều đó.

console.log(Object.keys(require('./package.json').dependencies));

Điều đó sẽ không cung cấp cho bạn các gói được cài đặt trên toàn cầu
Owen J Lamb

Câu hỏi ban đầu không xác định liệu họ có muốn bao gồm các gói được cài đặt trên toàn cầu hay không. Câu trả lời này cung cấp một sự thay thế hữu ích cho các câu trả lời khác.
Andy Fleming

3
for package in `sudo npm -g ls --depth=0 --parseable`; do
    printf "${package##*/}\n";
done

1
Vâng, tất cả Bash của tôi ngày nay có$()
AT
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.