Chciałbym użyć grunt-contrib-jasmine
pakietu NPM. Ma różne zależności. Część wykresu zależności wygląda następująco:
─┬ grunt-contrib-jasmine@0.4.1
│ ├─┬ grunt-lib-phantomjs@0.2.0
│ │ ├─┬ phantomjs@1.8.2-2
Niestety w tej wersji jest błąd, phantomjs
który uniemożliwia poprawną instalację w systemie Mac OS X. Zostało to naprawione w najnowszej wersji.
Jak mogę grunt-lib-phantomjs
użyć nowszej wersji phantomjs
?
Dodatkowy kontekst:
grunt-contrib-jasmine
wyraźnie wymaga wersji"~0.2.0"
zgrunt-lib-phantomjs
, który wyraźnie wymaga wersji"~1.8.1"
zphantomjs
.- Dodanie
phantomjs
najpierw do zależności mojego pakietu nie ma żadnego efektu; obie wersje są zainstalowane igrunt-contrib-jasmine
nadal korzystają ze starszych wersji (patrz: Czy podczas instalowania pakietu za pomocą NPM możesz powiedzieć, aby używał innej wersji jednej z jego zależności? ).
git clone
Wymagany moduł Just lub Fork. Możesz także usunąć zagnieżdżonephantomjs
ręcznie.grunt-contrib-jasmine
jest na wersji 0.5.1, która używa[email protected]
, która używa[email protected]
:)Odpowiedzi:
Możesz użyć funkcji npm shrinkwrap , aby zastąpić dowolną zależność lub zależność zależną.
Właśnie to zrobiłem w naszym chrapliwym projekcie. Potrzebowaliśmy nowszej wersji Connect, od wersji 2.7.3. sprawiał nam kłopoty. Więc stworzyłem plik o nazwie npm-shrinkwrap.json:
npm powinien automatycznie odebrać go podczas instalacji dla projektu.
(Widzieć: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/ )
źródło
grunt-contrib-connect
instalowana jest tylko zależność i jej dzieci. Wszystkie moje inne zależności w pakiecie.json nie są zainstalowane.node_modules
katalogu, tak aby zrzut zrzutu zależności był dokładnie tym, czego chciałem, a nie tylko przesłonięciem. Ale wciąż rodzaj bolesnego rozwiązania.node_modules
, uruchomienie instalacji z minimalnym zmniejszeniem zawartości wydaje się pozostaćdevDependencies
nietknięte, ale ignorujedependencies
, ale uruchomienie innej instalacji usuwa nieprecyzyjne elementy, więc na razie ważne jest, aby uruchomić,npm shrinkwrap
aby uzyskać pełny plik, zmodyfikować odpowiednią część i potem biegnijnpm install
jeszcze raz)Dla tych od 2018 roku i później, używając npm wersji 5 lub nowszej: edytuj
package-lock.json
: usuń bibliotekę z"requires"
sekcji i dodaj ją w „zależnościach”.Na przykład chcesz, aby
deglob
pakiet używałglob
wersji pakietu3.2.11
zamiast bieżącej. Otwieraszpackage-lock.json
i widzisz:Usuń
"glob": "7.1.2",
z"requires"
, dodaj"dependencies"
z odpowiednią wersją:Teraz usuń
node_modules
folder, uruchom,npm install
a doda brakujące części do"dependencies"
sekcji.źródło
npm install
działa raz. W moim przypadku zmiany są konieczne, ponieważ zagnieżdżony dep powoduje awarię.npm i
zamiast edycji pliku package-lock.json i dodania zależności podrzędnej do „zależności” tam, dodaj zależność podrzędną do sekcji „zależności” pakietu.jsonnpm install
ponownie, wszystkie zmianypackage-lock.json
zostaną przywrócone i otrzymam złą wersję dep.npm ci
i to nie dotykaćpackage-lock.json
Dla osób używających przędzy.
Próbowałem używać npm shrinkwrap, dopóki nie odkryłem, że przędza cli zignorowała mój plik npm-shrinkwrap.json.
Przędza ma https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ do tego. Schludny.
Sprawdź również tę odpowiedź: https://stackoverflow.com/a/41082766/3051080
źródło
Miałem problem polegający na tym, że jedna z zagnieżdżonych zależności miała lukę w kontroli audytu npm, ale nadal chciałem zachować wersję zależności nadrzędnej. rozwiązanie Shrinkwrap npm nie działało dla mnie, więc co zrobiłem, aby zastąpić zagnieżdżoną wersję zależności:
źródło
Shrinkwrap NPM oferuje dobre rozwiązanie tego problemu. Pozwala nam to zastąpić tę wersję określonej zależności określonego podmodułu.
Zasadniczo, po uruchomieniu instalacji npm, npm najpierw sprawdzi w twoim katalogu głównym, czy istnieje plik npm-shrinkwrap.json. Jeśli tak, najpierw wykorzysta to do określenia zależności pakietu, a następnie powróci do normalnego procesu pracy z plikami package.json.
Aby utworzyć plik npm-shrinkwrap.json, wszystko, co musisz zrobić, to
kod:
źródło
Znalazłem rozwiązanie, które działało dla mnie.
Więc. Najpierw edytuj plik npm-shrinkwrap.json zgodnie z zaleceniami dla wszystkich innych rozwiązań.
Następnie (w systemie Windows):
Inne proponowane rozwiązania są wystarczająco dobre, jeśli wykonujesz operację instalacji npm tylko raz. Ale po pierwszej „instalacji npm” plik „npm-shrinkwrap.json” jest ponownie modyfikowany, tak jak przed modyfikacją.
źródło