Я хотел бы использовать grunt-contrib-jasmine
пакет NPM. Это имеет различные зависимости. Часть графа зависимостей выглядит так:
─┬ grunt-contrib-jasmine@0.4.1
│ ├─┬ grunt-lib-phantomjs@0.2.0
│ │ ├─┬ phantomjs@1.8.2-2
К сожалению, в этой версии есть ошибка, phantomjs
которая препятствует правильной установке в Mac OS X. Это исправлено в последней версии.
Как я могу grunt-lib-phantomjs
использовать более новую версию phantomjs
?
Некоторый дополнительный контекст:
grunt-contrib-jasmine
явно требует версий"~0.2.0"
отgrunt-lib-phantomjs
, который явно требует версии"~1.8.1"
оphantomjs
.- Добавление
phantomjs
к моему пакету зависимостей сначала не имеет никакого эффекта; обе версии установлены и по-grunt-contrib-jasmine
прежнему используют более старые версии (см .: При установке пакета с помощью NPM вы можете сказать ему использовать другую версию одной из его зависимостей? ).
git clone
или разветвите необходимый модуль. Вы также можете удалить вложенныеphantomjs
вручную.grunt-contrib-jasmine
находится на 0.5.1, который используетgrunt-lib-phantomjs@0.3.1
, который используетphantomjs@1.9.1-0
:)Ответы:
Вы можете использовать термоусадочную пленку npm функциональность , чтобы переопределить любую зависимость или суб-зависимость.
Я только что сделал это в нашем грандиозном проекте. Нам нужна была более новая версия connect, начиная с 2.7.3. доставляла нам неприятности. Поэтому я создал файл с именем npm-shrinkwrap.json:
npm должен автоматически поднять его во время установки для проекта.
(См .: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/ )
источник
grunt-contrib-connect
зависимость и ее дочерние элементы. Все мои другие зависимости в package.json не установлены.node_modules
каталог так, что полный дамп зависимостей shrinkwrap был именно тем, что я хотел, а не просто переопределял. Но все же своего рода болезненное решение.node_modules
запуск установки с минимальной термоусадочной пленкой, похоже, оставляетdevDependencies
нетронутым, хотя и игнорируетсяdependencies
, но запуск другой установки удаляет неявные элементы, поэтому на данный момент важно запустить,npm shrinkwrap
чтобы получить полный файл, изменить рассматриваемый фрагмент и затем бегиnpm install
снова)Для пользователей с 2018 года и более поздних версий, используя npm версии 5 или новее: отредактируйте
package-lock.json
: удалите библиотеку из"requires"
раздела и добавьте ее в разделе «зависимости».Например, вы хотите, чтобы
deglob
пакет использовалglob
версию пакета3.2.11
вместо текущей. Вы открываетеpackage-lock.json
и видите:Удалить
"glob": "7.1.2",
из"requires"
, добавить"dependencies"
правильную версию:Теперь удалите вашу
node_modules
папку, запуститеnpm install
и она добавит недостающие части в"dependencies"
раздел.источник
npm install
работает один раз. В моем случае правка необходима, поскольку вложенный файл вызывает сбой.npm i
вместо редактирования вашего package-lock.json и добавления туда дочерней зависимости к «зависимостям», добавьтеnpm install
снова, все измененияpackage-lock.json
будут отменены, и я получу неверную версию депо.npm ci
и это не касаетсяpackage-lock.json
Для тех, кто использует пряжу.
Я пытался использовать npm shrinkwrap, пока не обнаружил, что пряжа cli игнорировала мой файл npm-shrinkwrap.json.
Пряжа имеет https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ для этого. Ухоженная.
Проверьте этот ответ тоже: https://stackoverflow.com/a/41082766/3051080
источник
У меня была проблема, когда у одной из вложенных зависимостей была уязвимость аудита npm, но я все же хотел сохранить версию родительской зависимости. Решение npm shrinkwrap у меня не сработало, поэтому я переопределил версию с вложенными зависимостями:
источник
Термоусадочная пленка NPM предлагает хорошее решение этой проблемы. Это позволяет нам переопределить эту версию конкретной зависимости конкретного субмодуля.
По сути, когда вы запускаете npm install, npm сначала просматривает ваш корневой каталог, чтобы узнать, существует ли файл npm-shrinkwrap.json. Если это произойдет, он будет использовать это сначала для определения зависимостей пакета, а затем перейдет к обычному процессу работы с файлами package.json.
Чтобы создать npm-shrinkwrap.json, все, что вам нужно сделать, это
код:
источник
Я нашел решение, которое сработало для меня.
Так. Сначала отредактируйте файл npm-shrinkwrap.json, как и все другие рекомендуемые решения.
Затем (в Windows):
Другие предложенные решения достаточно хороши, если вы выполняете операцию npm install только один раз. Но после первой 'npm install' файл 'npm-shrinkwrap.json' снова изменяется, как и до вашей модификации.
источник