Простий спосіб перерахувати модулі вузлів, з якими я пов'язаний npm?


123

Я шукаю команду, яка перелічить назви глобальних модулів, які я маю npm linkдо локальних копій, а також перелічить локальний шлях.

Насправді, перелік усіх встановлених на глобальному рівні модулів був би ще кращим, коли б npm link"я" якось позначений .


1
npm -g lsслід перелічити всі глобальні модулі, але я не знаю, чи в ньому перелічені зв'язані модулі
Ferdi265,

підтримуйте файл "package.json" для вашої заявки
CM

1
@CeeAim У мене є багато застосунків з великою кількістю пакету.jsons, у мене також є досить багато глобальних модулів для інших цілей, таких як CLI, і багато хто роздвоєний і npm link'd. Мені потрібен спосіб слідкувати.
callum

Відповіді:


64

Ви спробували просто перерахувати node_modulesвміст каталогу (наприклад ls -l node_modules | grep ^l)? Вони є нормальними посиланнями.

Якщо вам дійсно потрібно знайти всі посилання, ви можете спробувати щось подібне find / -type d -name "node_modules" 2>/dev/null | xargs -I{} find {} -type l -maxdepth 1 | xargs ls -l.


16
Не працює з локально пов'язаними модулями, розміщеними з іменами (@ namespace / moduleName). Жорстоким рішенням може бути:( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l
Андреа Карраро

2
Це рішення не працює в Windows (ані інші рішення).
Міхей Золту

2
@MicahZoltu Він буде працювати в Windows, якщо ви використовуєте термінал Git bash
Грег М.

1
Для пакетів @scoped просто додайте -R до команди ls:ls -l -R ./node_modules | grep ^l
Romasato

Нижче я знайшов відповідь, щоб працювати для мене stackoverflow.com/a/48593067/7491536
Джек Говард

194

Щоб перелічити всі глобально пов'язані модулі, це працює (документація https://docs.npmjs.com/cli/ls ):

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

Мені довелося спочатку оновити версію npm на своїй машині:

npm install npm@latest -g

15
Запропоновано найпростішим рішенням та роботою в Windows. Бажаю, що я міг би схвалити це не раз.
Artif3x

Перший працює без огляду --link=true. Моє середовище: 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.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 unlink " ed.

Для " списку всіх глобально встановлених модулів " в поточному шляху до npm ви просто зробите

npm list -g

Для подальших потреб ви можете поглянути

npm help folders

Ви не можете слідувати посиланнями назад, якщо ви не скануєте всю свою файлову систему та (тоді це не конкретний запит на npm).

Для швидкого пошуку файлів і каталогів по імені я використовую, locateякий працює над індексом, перебудованим зазвичай раз на день.

locate '*/node_modules'

і почніть працювати звідти (ви можете уточнити пошук за допомогою --regexpпараметра.


Я використовую без -gотримання локальних / найближчих перехідних посилань залежності. Дякую!
крос

4

Я знайшов це питання після того, як я також написав власний інструмент, ось він для повноти: npm-list-related .

Це також буде рекурсивно стежити за всіма пов'язаними пакунками внизу в ієрархії. У моїй роботі ми іноді можемо мати 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для перевірки наявності посилань, зроблених 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 після? Або обов'язково сміливо додайте команду cli на github.com/ryanve/symlinked :)
ryanve

@JacopKane Чи можете ви опублікувати проблему на github.com/ryanve/symlinked/isissue/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

але в деяких випадках підірвав помилки однолітків. Сподіваюся, що хтось допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.