Instalacja npm nie zainstaluje devDependencies


256

Z systemu Windows z jakiegoś powodu po uruchomieniu npm installnie instaluje devDependencies . AFAIK powinien. Jeśli uruchomię npm install --dev devDependencies są zainstalowane. Nie rozumiem, dlaczego npm installnie instaluje devDependencies również , ale instaluje tylko zależności. Co może być przyczyną? Jak mogę to naprawić?

Może coś jest nie tak z moim pakietem.json ? Jest wymieniony poniżej, jeśli może być pomocny:

{
  "name": "try-brunch",
  "version": "0.1.0",
  "private": "true",
  "devDependencies": {
    "brunch": "^2.0.4",
    "cssnano-brunch": "^1.1.5",
    "javascript-brunch": "^1.8.0",
    "sass-brunch": "^1.9.2",
    "uglify-js-brunch": "^1.7.8"
  },
  "dependencies": {
    "jquery": "^2.1.4"
  }
}

5
Dlaczego potrzebujemy nawet poprawki ? To powinno być domyślne! devDependenciessą dosłownie zależnościami dla twórców modułu . Założę się, że większość z nas korzysta npm installz modułu, aby go używać, zamiast go rozwijać.
Константин Ван

Załóżmy, że piszesz aplikację i potrzebujesz wtyczki rejestratora lub pakietu WebPack. to są devdeps. te muszą być zainstalowane. npm nie instaluje ich w niektórych przypadkach.
Tristan Tzara,

1
Mam na myśli, że instalacja devDependenciesjest potrzebna tylko podczas pisania pakietu (aplikacji). Korzystanie z niego nie wymaga devDependencies. Dlatego uzasadnione devDependenciesjest wymaganie zainstalowania dodatkowych flag. Jeśli zostaną npm installzainstalowane devDependencies domyślnie , użytkownicy również otrzymają nadmiarowe pakiety.
Константин Ван

udokumentowane zachowanie jest takie, że kiedy robię npm iw moim folderze, łapie py package.jsoni instaluje zarówno deps jak i devdeps. Jest to sposób, w jaki ma on działać i ma sens (np. Kiedy robię to npm ipo tym, jak git cloneoczekuję, że będę mieć wszystko, czego potrzebuję, w tym np. Wtyczki do webpacka). To pytanie dotyczy błędu, gdy rzeczywiste zachowanie jest inne niż zamierzone. proszę spojrzeć na docs - docs.npmjs.com/cli/install . Jest flaga, aby nie instalować devdeps, ale domyślnym zachowaniem jest ich instalacja, co ma doskonały sens i jest tym, czego wszyscy się spodziewają
Tristan Tzara

Nie widzę żadnych zdrowych powodów, aby pamiętać, aby uruchomić inną komendę, aby zainstalować np. Wtyczki do pakietu webpack lub defs typu maszynopisu lub jakiekolwiek inne devdeps za każdym razem, gdy ściągam. npm i powinienem uruchomić oba, co jest zamierzonym, zdrowym i udokumentowanym zachowaniem, więc szczerze nie rozumiem, dlaczego mówicie, że ten problem powinien być standardem
Tristan Tzara

Odpowiedzi:


305

Sprawdź dokumenty NPM pod kątem instalacji

Z --productionflagą (lub gdy zmienna środowiskowa NODE_ENV jest ustawiona na produkcyjną), npm nie będzie instalował modułów wymienionych w devDependencies. "

--only={prod[uction]|dev[elopment]}Argumentu spowoduje albo tylko devDependencies lub tylko non-devDependencies być zainstalowane niezależnie od NODE_ENV „.

Czy próbowałeś

npm install --only=dev

Jeśli obawiasz się, że plik package.json może być niepoprawny, najlepiej to zrobić. Utwórz nowy folder i uruchom:

npm init --yes

Następnie:

npm install --save-dev brunch@^2.0.4
npm install --save-dev cssnano-brunch@^1.1.5
npm install --save-dev javascript-brunch@^1.8.0
npm install --save-dev sass-brunch@^1.9.2
npm install --save-dev uglify-js-brunch@^1.7.8
npm install jquery@^2.1.4 --save

I powinieneś być dobry! W przeciwnym razie będzie publikować inne opcje.

Sprawdź konfigurację npm:

npm config list

npm pobiera ustawienia konfiguracji z wiersza poleceń, zmiennych środowiskowych i plików npmrc. Sprawdź więc zmienne środowiskowe i plik npmrc .

Nadal nie działa?

Ok, utwórz nowy folder, najlepiej gdzieś indziej w twoim systemie plików. to znaczy. nie w tej samej hierarchii folderów. Na przykład C: \ myNewFolder - im bliżej podstawy C: tym lepiej.

Następnie uruchomić:

npm init --yes

Teraz uruchom:

npm install underscore --save

i w końcu:

npm install mocha --save-dev

Czy wszystko działa zgodnie z oczekiwaniami?

Usiłuję zrozumieć, czy Twój problem ma charakter globalny, czy może jest lokalny w stosunku do poprzedniego folderu i zależności.


Tristan - czy to pomaga twojej sytuacji? Czy możesz oznaczyć odpowiedź jako poprawną, czy też dać znać wynik wypróbowania powyższego?
arcseldon

2
npm install --only = dev instaluje devdeps, ale chciałbym zainstalować jednocześnie deps i devdeps. Package.json wydaje się być w porządku, ponieważ jego odtworzenie niczego nie zmienia. Czy mam rację, że NODE_ENV istnieje zarówno globalnie, jako wartość domyślna, jak i lokalnie, jako wartość dla projektu? Gdzie mogę sprawdzić i zmienić te wartości w systemie Windows (szukałem i nie mam zmiennej systemowej NODE_ENV)
Tristan Tzara

@TristanTzara - obecnie pracuję prawie wyłącznie na MAC. Jednak na podstawie wspomnień minionych dni (lata temu na NT i XP) - czy możesz wpisać coś takiego jak „ustaw” w oknie wiersza polecenia. W przeciwnym razie przejdź do czegoś takiego jak Właściwości systemu -> Zaawansowane -> Zmienne środowiskowe i sprawdź tam swoje wpisy . Szukasz „klucza” w NODE_ENV. Będę google teraz dla opcji systemu Windows, ale opublikowałem to na wypadek, gdyby to pomogło.
arcseldon


@TristanTzara - to dobrze wiedzieć. Jedna myśl, sprawdź wszystkie katalogi nadrzędne nad katalogiem, które nie działają. Poszukaj istniejącego folderu node_modules ... npm będzie wyszukiwał w górę, próbując rozwiązać zależność, i może to być coś dziwnego, jakby podnosił istniejący zainstalowany moduł w górę drzewa katalogów, a zatem odmawia instalacji twojego w folderze podrzędnym . Zwykłe miejsce znajduje się bezpośrednio w twoim katalogu domowym. Powodzenia i dzięki za potwierdzenie mojej odpowiedzi: D
arcseldon

85

Sprawdź, czy wartość produkcyjna konfiguracji npm jest ustawiona na true. Jeśli ta wartość jest prawdą, pominie ona zależności między programistami.

Biegać npm config get production

Aby ustawić: npm config set -g production false


Zastanawiam się, czy gdzieś pomiędzy npm 5.x a npm 6.x, jeśli nie ustawiono żadnej wartości, domyślna staje się truezamiast false?
James Perih

38

upewnij się, że nie masz zmiennej env NODE_ENVustawionej na „produkcja”.

Jeśli to zrobisz, zależności dev nie zostaną zainstalowane bez --devflagi


Spojrzałem na moje zmienne systemowe i nawet ich nie mam. Może patrzę w złe miejsce?
Tristan Tzara,

13
Uwaga: rekursywnienpm install --dev instaluje devDependencies . To prawie nigdy nie jest to, czego chcesz, i w rzeczywistości jest przestarzałe .
Wonko

Dziękuję Ci. Nie wiedziałem, że to wpłynie na regularne instalacje npm, ale to logika. :)
Lothre1,

6
Użycie tej --devopcji jest przestarzałe. Użyj --only=devzamiast tego
Sarath Ak

16

Miałem package-lock.jsonplik ze starej wersji pliku package.json, usunąłem go, a następnie wszystko zostało poprawnie zainstalowane.


Bingo! To rozwiązało mój problem. Wygląda na to, że powinniśmy to zrobić w repozytorium.
losowy

9

Miałem podobny problem. npm install --only=devnie działało i nie działało npm rebuild. Ostatecznie musiałem usunąćnode_modules i package-lock.jsoni uruchom npm installponownie. To naprawiło to dla mnie.


7

Można użyć krótkiej drogi do zależności instalacji tylko do programowania w następujący sposób:

npm i -D <dependencies-names>

najlepsza odpowiedź. Powinieneś być na szczycie
wwwwwwwwwwww

6

Upewnij się, że twój package.jsonjest ważny ...

Miałem następujący błąd ...

npm WARN Invalid name: "blah blah blah"

i to podobnie spowodowało devDependencies nie został zainstalowany.

FYI, zmieniając package.json„nazwę”, aby blah-blah-blahto naprawić.


0

Mam ten sam problem, ponieważ ustawiłem NODE_ENV=productionczas budowania Dockera. Następnie dodaję jeszcze jeden npm install --only=dev. Wszystko dziala. Potrzebuję devDependencies do budowania modułów TypeSciprt

RUN npm install
RUN npm install --only=dev
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.