Список рабочих пространств NPM, похожих на lerna ls

Я ищу команду NPM, похожую на lerna ls это распечатало бы все рабочие места.

Например, скажем, у меня есть package1 а также package2 в packages подкаталог и мой package.json выглядит так:

      "workspaces": [
 "./packages/*"
]

Я хочу получить список рабочих пространств NPM 7. В качестве примера я ожидал:

  • пакеты / пакет1
  • пакеты / пакет2

Я надеялся npm ls -p --depth 0 сделал бы это, но, к сожалению, он распечатывает и другие зависимости.

Думаю, я мог бы использовать npm ls -jsonи проанализируйте зависимости верхнего уровня. Однако я надеюсь, что есть способ получше?

4 ответа

Есть новый способnpm@8:

      npm query .workspace | jq -r '.[].location'

Возвращает ожидаемый результат:

      packages/package1
packages/package2

Все еще требуетjq, но немного чище, чем раньше.

Так что пока я использую JQ для этого.

Пример: npm ls --production --depth 1 -json | jq -r '.dependencies[].resolved'

Для моего примера это приводит к:

      file:../../packages/package1
file:../../packages/package2

Я не знаю, почему это добавляет ../../перед ним. Итак, чтобы еще больше улучшить это: npm ls --production --depth 1 -json | jq -r '.dependencies[].resolved[11:]'возвращает ожидаемый результат:

      packages/package1
packages/package2

Я также отправил запрос функции здесь: https://github.com/npm/cli/issues/4086 .

Это должно работать на версии npm >= 8.

      npm ls -ws

На всякий случай, если кто-то ищет чистое решение NodeJS-npm:

      npm exec -ws -c 'node -e "console.log(require(\"./package.json\").name)"'
Другие вопросы по тегам