Jaka jest różnica między -- save I -- save-dev?

Jaka jest różnica między:

Npm install [nazwa_pakietu] --save

I

Npm install [nazwa_pakietu] --save-dev

Co to znaczy?

Author: Omar Hussein, 2014-04-06

9 answers

  • --save-dev jest używany do zapisania pakietu do celów programistycznych. Przykład: testy jednostkowe, minifikacja..
  • --save służy do zapisywania pakiet wymagany do uruchomienia aplikacji.
 346
Author: Tuong Le,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-11 15:56:48

Różnica między --save i --save-dev może nie być natychmiast zauważalna, jeśli wypróbowałeś je oba na własnych projektach. Oto kilka przykładów...

Powiedzmy, że budowałeś aplikację, która używała moment pakiet do analizy i wyświetlania dat. Twoja aplikacja jest schedulerem, więc naprawdę potrzebuje tego pakietu, aby uruchomić, jak w: nie można uruchomić bez niego . W tym przypadku należy użyć

npm install moment --save

To stworzy nową wartość w Twoim paczka.json

"dependencies": {
   ...
   "moment": "^2.17.1"
}

Kiedy rozwijasz, naprawdę pomaga korzystanie z narzędzi, takich jak zestawy testowe i może potrzebować jasmine-core i karma . W tym przypadku należy użyć

npm install jasmine-core --save-dev
npm install karma --save-dev

Spowoduje to również utworzenie nowej wartości w pakiecie.json

"devDependencies": {
    ...
    "jasmine-core": "^2.5.2",
    "karma": "^1.4.1",
}

Robisz nie potrzebujesz zestawu testów, aby uruchomić aplikację w normalnym stanie, więc jest to zależność typu --save-dev, nic więcej. Możesz zobaczyć, jak jeśli nie rozumiesz, co naprawdę się dzieje, to jest trochę trudne do wyobraź sobie.

Pobrane bezpośrednio z NPM docs docs#dependencies

Zależności

Zależności są określone w prostym obiekcie, który mapuje nazwę pakietu do zakresu wersji. Zakres wersji jest ciągiem, który ma jeden lub więcej deskryptorów rozdzielonych spacjami. Można również określić zależności z adresem URL tarball lub GIT.

Proszę nie umieszczać wiązek testowych lub transpilerów w zależności obiekt. Zobacz też devDependencies, poniżej.

Nawet w dokumentach, prosi o użycie --save-dev dla modułów takich jak wiązki testowe.

Mam nadzieję, że to pomoże i jest jasne.
 346
Author: Michael Bruce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-02 21:25:15

Domyślnie NPM po prostu instaluje pakiet pod node_modules. Gdy próbujesz zainstalować zależności dla aplikacji / modułu, najpierw musisz je zainstalować, a następnie dodać je do sekcji dependencies swojego package.json.

--save-dev dodaje pakiet innej firmy do zależności deweloperskich pakietu. Nie zostanie on zainstalowany, gdy ktoś zainstaluje Twój Pakiet. Zazwyczaj jest instalowany tylko wtedy, gdy ktoś klonuje twoje repozytorium źródłowe i uruchamia w nim npm install.

--save dodaje pakiet innej firmy do zależności pakietu. Zostanie on zainstalowany razem z pakietem, gdy ktoś uruchomi npm install package.

Dev dependencies są zależnościami, które są potrzebne tylko do rozwoju pakietu. Mogą to być biegacze testowe, Kompilatory, packagery itp. Oba typy zależności są przechowywane w pliku package.json pakietu. --save dodaje do dependencies, --save-dev dodaje do devDependencies

Dokumentacja Npm install może być tutaj.

 50
Author: Lakshmi Swetha G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-15 11:17:09

Zgodnie z sugestią @andreas-hultgren w Ta odpowiedź i zgodnie z npm docs :

Jeśli ktoś planuje pobrać i używać twojego modułu w swoim programie, to prawdopodobnie nie chce lub nie musi pobierać i budować zewnętrznego frameworka testowego lub dokumentacji, którego używasz.

Jednak dla rozwoju webapp, Yeoman (Narzędzie rusztowania, które instaluje peer-reviewed, wstępnie napisany pakiet.plik json między innymi) umieszcza wszystkie pakiety w devDependencies i nic w dependencies, więc wygląda na to, że użycie --save-dev jest bezpiecznym rozwiązaniem w webapp development, przynajmniej.

 31
Author: wayfarer_boy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:28

Doskonałym tego przykładem jest:

$ npm install typescript --save-dev

W tym przypadku, chcesz mieć Typescript (język kodowania javascript-parseable) dostępny do rozwoju, ale po wdrożeniu aplikacji, nie jest już konieczne, ponieważ cały kod został przeniesiony do javascript. W związku z tym nie ma sensu umieszczać go w opublikowanej aplikacji. Rzeczywiście, zajmie to tylko miejsce i zwiększy czas pobierania.

 29
Author: Jackalope,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-30 16:13:11

--save-dev zapisuje specyfikację semver do tablicy "devDependencies" w pliku deskryptora pakietu, --save zapisuje ją do "dependencies".

 16
Author: alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-06 08:07:21

--save-dev jest używany dla modułów używanych w rozwoju aplikacji, nie wymaga podczas jej uruchamiania w środowisku produkcyjnym --save jest używany do dodania go do pakietu.json i jest on wymagany do uruchomienia aplikacji.

Przykład: express,body-parser,lodash,helmet, mysql wszystkie te są używane podczas uruchamiania aplikacji use --save to put in dependencies podczas gdy mocha,istanbul,chai, sonarqube-scanner wszystkie są używane podczas programowania, więc umieścić je w Dev-dependencies .

Npm link lub npm install zainstaluje również moduły dev-dependency wraz z modułami zależności w folderze projektu

 4
Author: BittuS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-28 08:30:12

Jasne odpowiedzi już są. Warto jednak wspomnieć, jak devDependencies wpływa na instalowanie pakietów:

Domyślnie npm install zainstaluje wszystkie moduły wymienione jako zależności w pakiecie.json . Z flagą --production (lub gdy zmienna środowiskowa NODE_ENV jest ustawiona na production ), npm nie zainstaluje modułów wymienionych w devDependencies .

Zobacz: https://docs.npmjs.com/cli/install

 3
Author: Alireza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-13 03:25:58

Zazwyczaj nie chcesz nadmuchać pakietu produkcyjnego rzeczami, które zamierzasz wykorzystać tylko w celach rozwojowych. Więc użyj opcji --save-dev (lub-D), aby oddzielić te pakiety, takie jak watchery(nodemon), frameworki testów jednostkowych(jest, jasmine, mocha, chai itp.itd.)

Wszelkie inne pakiety biblioteczne, które muszą działać, muszą być zainstalowane za pomocą --save (or-S)

npm install --save lodash       //prod dependency
npm install -S moment           // "       "
npm install -S opentracing      // "       "

npm install -D jest                 //dev only dependency
npm install --save-dev typescript   //dev only dependency

Jeśli otworzysz opakowanie.pliku json, wtedy zobaczysz te wpisy wymienione pod dwoma różne sekcje:

"dependencies": {
  "lodash": "4.x",
  "moment": "2.x",
  "opentracing": "^0.14.1"
},

"devDependencies": {
    "jest": "22.x",
    "typescript": "^2.8.3"
},
 1
Author: velhala,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-22 19:38:47