Как обновить конкретную версию подпакета с помощью npm

Я проверил глобальный пакет minimatch на глоток

$ npm list -g minimatch

+-- gulp@3.9.1
| `-- vinyl-fs@0.3.14
|   +-- glob-stream@3.1.18
|   | +-- glob@4.5.3
|   | | `-- minimatch@2.0.10  deduped
|   | `-- minimatch@2.0.10
|   `-- glob-watcher@0.0.6
|     `-- gaze@0.5.2
|       `-- globule@0.1.0
|         +-- glob@3.1.21
|         | `-- minimatch@0.2.14  deduped
|         `-- minimatch@0.2.14

Теперь я хотел обновить все версии minimatch из определенного пакета gulp (все minimatch@0.2.14 и minimatch@3.04) до последней версии.

Есть ли какая-нибудь команда в npm, которая обновляет мои существующие зависимости пакетов?

2 ответа

Решение

Вот мое решение, вы можете создать символическую ссылку для пакета minimatch, используя

npm ln
npm link (in package dir)
npm link [<@scope>/]<pkg>[@<version>]

вот ссылка для более подробного объяснения https://docs.npmjs.com/cli/link

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

npm audit [--json|--parseable]
npm audit fix [--force|--package-lock-only|--dry-run|--production|--only=dev]

вот документация https://docs.npmjs.com/cli/link

Вы не можете и не должны обновлять подпакеты (пакеты, используемые как зависимости для других пакетов).

Модули Node разработаны так, чтобы содержать все зависимости с указанными версиями внутри node_modules, чтобы избежать проблем с новыми обновлениями. Скажем ваш minimatch@3.0.4 вводит некоторые новые функции, теперь glob@4.5.3 может перестать работать, и в свою очередь gulp@3.9.1 может перестать работать, как хорошо.

Вы должны либо:

Обновление до нового gulp версия, не беспокоясь о minimatch

npm update gulp

или используйте последнюю версию minimatch напрямую, используя

npm install minimatch

Однако, если вы действительно хотите выполнить операцию по какой-либо причине, вы можете попробовать следующий уродливый хак:

  • установить minimatch где-нибудь в случайном месте с npm install minimatch@3.0.4
  • перейти к node_modules папку в этом месте и скопируйте minimatch папка
  • найдите вашу папку установки gulp (это может зависеть от вашей системы, C:\Users\user\AppData\Roaming\npm\node_modules\gulp в Windows или /usr/lib/node_modules/gulp/ в Linux)
  • ищи minimatch внутри gulp установочная папка (find . | grep minimatch)
  • заменить все найденное minimatch папки с той, которую вы только что установили в случайном месте

С этой точки зрения gulp следует использовать обновленный minimatch, хотя npm list будет по-прежнему отображать старый номер версии.
Опять же, это крайне не рекомендуется и предоставляется только для ответа на вопрос.

Другие вопросы по тегам