Mam to w moim pliku package.json (wersja skrócona):
{
"name": "a-module",
"version": "0.0.1",
"dependencies": {
"coffee-script": ">= 1.1.3"
},
"devDependencies": {
"stylus": ">= 0.17.0"
}
}
Używam NPM w wersji 1.1.1 na Mac 10.6.8.
Kiedy uruchomić następujące polecenie z katalogu głównego projektu, instaluje zarówno dependencies
a devDependencies
:
npm install
Miałem wrażenie, że to polecenie zainstalowało devDependencies
:
npm install --dev
Jak mam to zrobić, aby npm install
instalowało się tylko dependencies
(aby środowisko produkcyjne pobierało tylko te moduły), podczas gdy coś takiego npm install --dev
instaluje oba dependencies
i devDependencies
?
dependencies
idevDependencies
kiedy każdy z nich jest używany.Odpowiedzi:
npm install
Polecenie zainstalujedevDependencies
po drugiejdependencies
, gdy prowadzony wewnątrz katalogu pakietu w środowisku programistycznym (domyślnie).Użyj
npm install --only=prod
(lub--only=production
), aby zainstalować tylkodependencies
, a niedevDependencies,
niezależnie od wartościNODE_ENV
zmiennej środowiskowej.Źródło: npm docs
Uwaga: przed wersją 3.3.0 programu npm (13.08.2015) została wywołana opcja
--production
, tjnpm install --production
.źródło
npm install yourpackage.tgz
nie otrzymywali również devDependencies. Tak jednak już jest. Zobacz odpowiedź Kevina Coxa poniżej ( stackoverflow.com/a/15826602/825588 ).NODE_ENV=production
z czegoś innego, co robiłem i nie mogłem się zorientować w życiu, dlaczegonpm install
nie instalowałbym zależności. Dzięki za dokładną odpowiedź.npm install --dev
instalowałby tylko zależności--dev
opcji jest przestarzałe. Użyj--only=dev
zamiast tego.Też wpadam na ten problem! instalacja npm jest nieco myląca, a posty internetowe wciąż wprowadzają flagi -d / - dev, jakby istniał jawny tryb instalacji „programistyczny”.
npm install
zainstaluje zarówno „ zależności ”, jak i „ devDependencies ”npm install --production
zainstaluje tylko „ zależności ”npm install --dev
zainstaluje tylko „ devDependencies ”źródło
NODE_ENV
jest ustawiony naproduction
i uruchomisznpm install
, nie zainstaluje zależności programistycznych. W moim pliku Docker spotkałem się z tym problemem.npm --production=false install
(choć nie jestem pewien, czy to zadziała obok flagi --dev)Nowa opcja to:
Jeśli chcesz zainstalować tylko devDependencies:
źródło
--only=prod
. Pan ma częściową rację. ; PJeśli czytasz ten POST w 2016 roku, osiągnij to, czego chcesz, używając
argument spowoduje zainstalowanie tylko devDependencies lub tylko non-devDependencies niezależnie od NODE_ENV.
od: https://docs.npmjs.com/cli/install
źródło
--production
i--only={prod[uction]|dev[elopment]}
.Jeśli już zainstalowałeś wszystkie swoje zależności i chcesz uniknąć konieczności ponownego pobierania pakietów produkcyjnych z NPM, możesz po prostu wpisać:
Spowoduje to usunięcie zależności deweloperów z
node_modules
folderu, co jest przydatne, jeśli próbujesz zautomatyzować proces dwuetapowyBieganie
npm prune
pomiędzy nimi pozwoli Ci uniknąć konieczności ponownej instalacji wszystkiego!źródło
Podczas korzystania z „instalacji npm” moduły są ładowane i dostępne w całej aplikacji, niezależnie od tego, czy są to „devDependencies” czy „dependencies”. Suma tego pomysłu: wszystko, co pakiet.json definiuje jako zależność (dowolnego typu), instaluje się w module node_modules.
Różnica między zależnościami / devDependencies / opcjonalnymiDependencies polega na tym, co konsumenci twojego kodu mogą zrobić z npm, aby zainstalować te zasoby.
Zgodnie z dokumentacją: https://npmjs.org/doc/json.html ...
Aby rozwiązać to pytanie, jeśli chcesz zainstalować TYLKO „zależności” przy użyciu npm, następujące polecenie to:
Można to potwierdzić, sprawdzając zatwierdzenie Git, które dodało ten filtr (wraz z kilkoma innymi filtrami [wymienionymi poniżej], aby zapewnić tę funkcjonalność).
Alternatywne filtry, które mogą być używane przez npm:
@dmarr spróbuj użyć npm install --production
źródło
npm zainstaluje zależności dev podczas instalacji z pakietu (jeśli jest
package.json
w bieżącym katalogu). Jeśli pochodzi z innej lokalizacji (rejestr npm, git repo, inna lokalizacja w systemie plików), instaluje tylko zależności.źródło
npm install some-module
nie będzie instalować zależności deweloperówsome-module
.Przekonałem się, że podczas próby zainstalowania zależności deweloperskich dla pakietu zawierającego dodatek do węzła nie można uniknąć budowania dodatku podczas uruchamiania npm install --dev, nawet jeśli po prostu chcesz zainstalować devDependencies. Musiałem więc ominąć npm plecy:
Albo jeszcze lepiej (i bardziej zwięźle),
źródło
Użyj
npm install packageName --save
tego doda pakiet w zależnościach , jeśli użyjesznpm install packageName --save-dev
to devDependencies .npm install packageName --save-dev
powinien być używany do dodawania pakietów do celów programistycznych. Jak dodanie pakietów TDD (Chai, mokka itp.). Które są wykorzystywane w rozwoju, a nie w produkcji.źródło
package.json
ale gdy te zależności zostaną już zapisane , to jak wymusićnpm
zainstalowanie tylko jednego określonego rodzaju zależności. Kiedy przeczytałem twoją odpowiedź tutaj, nie nauczyłem się niczego, co pomogłoby rozwiązać problem postawiony przez PO.Warto wspomnieć, że można użyć
NODE_ENV
zmiennej środowiskowej, aby osiągnąć ten sam wynik. Szczególnie przydatne, jeśli konteneryzujesz aplikację Node (np. Docker).Powyższy kod zainstaluje wszystkie twoje zależności oprócz tych programistycznych (tj
devDependencies
.).jeśli potrzebujesz użyć zmiennych środowiskowych w swojej
Dockerfile
więcej informacji można znaleźć tutaj .Zmienne środowiskowe można łatwo zastąpić w razie potrzeby (np. Jeśli chcesz uruchomić zestaw testowy, powiedz na Travis CI). Gdyby tak było, możesz zrobić coś takiego:
Dokumentacja NPM tutaj
Szczęśliwa konteneryzacja =)
źródło
Proponuję użyć
npm ci
. Jeśli chcesz zainstalować tylko pakiety potrzebne do produkcji (jak napisałeś - bezdevDependencies
), to:lub
Jeśli wolisz oldschool,
npm install
to:lub
Oto dobra odpowiedź, dlaczego powinieneś używać
npm ci
.źródło
npm ci
również nie tylkonpm install
!Musisz dodać do wybranej odpowiedzi: na razie
npm install
w katalogu pakietu (zawierającympackage.json
) zainstaluje devDependencies,npm install -g
ale ich nie zainstaluje.źródło
-g
nie instaluje siędevDependencies
, ale instaluje pakiety globalnie, co często nie jest zamierzonym rezultatem.npm install --production
to właściwy sposób instalowania modułów węzłów wymaganych do produkcji. Sprawdź dokumentację, aby uzyskać więcej informacjiźródło
Teraz jest problem, jeśli masz pakiet-lock.json z npm 5+. Musisz go usunąć przed użyciem
npm install --production
.źródło
I, zgodnie z pytaniem, aby zainstalować tylko zależności, pomoże poniższe polecenie
źródło