Простой способ перечислить модули узлов, с которыми я связан npm?


124

Я ищу команду, которая перечислит имена глобальных модулей, которые у меня есть npm linkв локальных копиях, а также список локальных путей.

Фактически, список всех глобально установленных модулей был бы даже лучше, если бы модули npm linkd были как-то отмечены .


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

поддерживать файл "package.json" для вашего приложения
CM

1
@CeeAim У меня есть много приложений с большим количеством package.jsons, у меня также есть довольно много глобальных модулей для других целей, таких как CLI, и многие из них разветвлены и npm linkd. Мне нужен способ отслеживать.
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.


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

2
Это решение не работает в Windows (как и другие решения).
Мика Золту 04

2
@MicahZoltu Он будет работать в Windows, если вы используете терминал Git bash
Грег М.

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

Я нашел, что ответ ниже работает для меня stackoverflow.com/a/48593067/7491536
Джек Ховард

196

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

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

Однако сначала мне пришлось обновить версию npm на моей машине:

npm install npm@latest -g

15
Проголосовали за простейшее решение, работающее в Windows. Хотел бы я проголосовать за это больше одного раза.
Artif3x

1-й работает без --link=true. Моя среда: Win10, NVM = 1.1.7, текущий узел =
8.14.0

1
и удалить один из перечисленных:npm unlink <package> -g
zamnuts

@ Jeb50, что имеет смысл, потому что связанные пакеты устанавливаются глобально.
кас

20

Лучшая альтернатива синтаксическому анализу ls- использовать findвот так:

find . -type l

Вы можете использовать -maxdepth 1только для обработки первого уровня каталога:

find . -maxdepth 1 -type l

Вы можете использовать -lsдля дополнительной информации.

Например, для поиска узловых модулей, связанных npm:

find node_modules -maxdepth 1 -type l -ls

Вот статья, почему синтаксический анализ ls- не лучшая идея


Это было полезно для меня - спасибо :) Суть
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'

и начните работать оттуда (вы можете уточнить поиск с помощью --regexpoption.


Я использую без, -gчтобы получить мои локальные / ближайшие временные ссылки зависимости. Спасибо!
кросс

4

Я нашел этот вопрос после того, как написал свой собственный инструмент, вот он для полноты: npm-list-connected .

Он будет рекурсивно следовать за всеми связанными пакетами вниз по иерархии, в моей работе мы иногда можем иметь npm link2-3 уровня в глубину, и таким образом вы можете точно увидеть, какие из них являются локальными, а какие нет, избегая сюрпризов.

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

3

Я создал модуль Node.js, который используется fsдля проверки символических ссылок, созданных кем- npm linkлибо иным образом.

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

var symlinked = require("symlinked")

console.log(symlinked.names())

2
Было бы очень приятно, если бы вы добавили для этого исполняемый файл CLI, особенно в свете medium.com/@maybekatz/… . Большинство случаев использования, когда необходимо найти пакеты с символическими ссылками, взяты из интерфейса командной строки.
cchamberlain

по какой-то причине не мог обнаружить никаких ссылок :(
JacopKane

@cchamberlain, можете ли вы указать мне на хороший инструмент CLI для моделирования API после? Или определенно не стесняйтесь вносить команду
cli

@JacopKane Можете ли вы опубликовать проблему с подробностями на github.com/ryanve/symlinked/issues/new ?
ryanve

1
@ryanve - done github.com/ryanve/symlinked/pull/1 - Я также добавил поддержку пакетов с ограниченной областью видимости, поскольку это не сработало. Престижность простой конструкции! :)
cchamberlain

1

Я вижу себя и других, которые часто задают один и тот же вопрос. Я написал для себя небольшой интерфейс командной строки, призванный link-statusотображать эту информацию, это может помочь другим! Посмотрите здесь!


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

для отображения глобальных ссылок, включая пакеты с пространством имен.

Ответ @andrew работает иногда:

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

но в некоторых случаях приводил к ошибкам peer dep. Надеюсь, это кому-то поможет!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.