Как переопределить вложенные версии зависимостей NPM?
я хотел бы использовать 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"
ofgrunt-lib-phantomjs
, что явно требует версии"~1.8.1"
ofphantomjs
. - добавлять
phantomjs
к зависимостям моего пакета сначала не влияет; обе версии установлены иgrunt-contrib-jasmine
по-прежнему использует старые версии (см.:при установке пакета с NPM вы можете сказать ему использовать другую версию одной из его зависимостей?).
3 ответов
вы, вероятно, уже нашли обходной путь для этого.
в любом случае, вы можете использовать npm shrinkwrap функциональность, чтобы переопределить любую зависимость или суб-зависимость.
Я только что сделал это в нашем проекте grunt. Нам нужна была более новая версия connect, начиная с 2.7.3. доставлял нам неприятности. Поэтому я создал файл с именем npm-shrinkwrap.в JSON :
{
"dependencies": {
"grunt-contrib-connect": {
"version": "0.3.0",
"from": "grunt-contrib-connect@0.3.0",
"dependencies": {
"connect": {
"version": "2.8.1",
"from": "connect@~2.7.3"
}
}
}
}
}
npm должен автоматически забрать его во время установки для проект.
(см.: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/)
для тех, кто из 2018 и за его пределами, используя npm версии 5 или более поздней версии: отредактируйте свой package-lock.json
: удалите библиотеку из "requires"
раздел и добавьте его в раздел "зависимости".
например, вы хотите deglob
пакета, чтобы использовать glob
версия пакета 3.2.11
вместо текущей. Вы открываете package-lock.json
и видим:
"deglob": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
"integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
"requires": {
"find-root": "1.1.0",
"glob": "7.1.2",
"ignore": "3.3.5",
"pkg-config": "1.1.1",
"run-parallel": "1.1.6",
"uniq": "1.0.1"
}
},
удалить "glob": "7.1.2",
С "requires"
добавьте "dependencies"
С нужную версию:
"deglob": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
"integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
"requires": {
"find-root": "1.1.0",
"ignore": "3.3.5",
"pkg-config": "1.1.1",
"run-parallel": "1.1.6",
"uniq": "1.0.1"
},
"dependencies": {
"glob": {
"version": "3.2.11"
}
}
},
теперь удалите , используя npm install
и он добавит недостающие части в .
самый простой минимум-добавить в пакет только начальную сокращенную зависимость json.формат JSON. "От " и" до " нужно
"grunt-contrib-connect": {
"version": "0.3.0",
"from": "grunt-contrib-connect@0.3.0",
"dependencies": {
"connect": {
"version": "2.8.1",
"from": "connect@~2.7.3"
}
}
}