Heute veröffentlichen wir den vierten Teil der Übersetzung von Node.js. In diesem Artikel werden wir uns mit npm 
package.json und auch die Funktionen der 
package-lock.json package.json und 
package-lock.json .

[Wir empfehlen Ihnen zu lesen] Andere Teile des ZyklusTeil 1: 
Allgemeine Informationen und erste SchritteTeil 2: 
JavaScript, V8, einige EntwicklungstricksTeil 3: 
Hosting, REPL, Arbeit mit der Konsole, ModuleTeil 4: 
Dateien npm, package.json und package-lock.jsonTeil 5: 
npm und npxTeil 6: 
Ereignisschleife, Aufrufstapel, TimerTeil 7: 
Asynchrone ProgrammierungTeil 8: 
Node.js-Handbuch, Teil 8: HTTP- und WebSocket-ProtokolleTeil 9: 
Node.js-Handbuch, Teil 9: Arbeiten mit dem DateisystemTeil 10: 
Node.js-Handbuch, Teil 10: Standardmodule, Streams, Datenbanken, NODE_ENVVollständiges PDF des Node.js-Handbuchs Npm Grundlagen
Npm (Node Package Manager) ist der Node.js-Paketmanager. Im ersten Teil dieses Materials haben wir bereits erwähnt, dass es jetzt in npm mehr als eine halbe Million Pakete gibt, was es zum weltweit größten Repository von Code macht, der in einer Sprache geschrieben ist. Dies deutet darauf hin, dass Sie in npm Pakete finden, die für fast jede Aufgabe entwickelt wurden.
Ursprünglich wurde npm als Paketverwaltungssystem für Node.js erstellt, heute wird es jedoch auch zur Entwicklung von Front-End-Projekten in JavaScript verwendet. Für die Interaktion mit der npm-Registrierung wird der gleichnamige Befehl verwendet, der dem Entwickler eine Vielzahl von Möglichkeiten bietet.
▍Laden von Paketen
Mit dem Befehl 
npm können Sie Pakete aus der Registrierung herunterladen. Im Folgenden werden Beispiele für seine Verwendung betrachtet.
▍Installation aller Projektabhängigkeiten
Wenn das Projekt eine 
package.json Datei hat, können Sie alle Abhängigkeiten dieses Projekts mit dem folgenden Befehl installieren:
 npm install 
Dieser Befehl lädt alles herunter, was das Projekt benötigt, und 
node_modules diese Materialien im Ordner 
node_modules sie, wenn sie nicht im Projektverzeichnis vorhanden sind.
▍Installieren eines separaten Pakets
Ein separater kann mit dem folgenden Befehl installiert werden:
 npm install <package-name> 
Sie können oft sehen, wie dieser Befehl nicht in einer so einfachen Form, sondern mit einigen Flags verwendet wird. Betrachten Sie sie:
- Mit --saveFlag--savekönnen--saveein Paket installieren und dem Abschnitt "dependencies" der Dateipackage.jsoneinen Eintrag hinzufügen, in dem die Projektabhängigkeiten beschrieben werden. Diese Abhängigkeiten werden vom Projekt zur Implementierung seiner Hauptfunktionalität verwendet. Sie werden während der Bereitstellung auf dem Server installiert (nach der Veröffentlichung von npm 5 werden Einträge zu installierten Paketen im Abschnitt "Abhängigkeiten" automatisch und ohne Verwendung dieses Flags vorgenommen).
- Mit dem --save-devkönnen Sie das Paket installieren und einen Eintrag darüber zu dem Abschnitt hinzufügen, der eine Liste der Entwicklungsabhängigkeiten (--save-devPakete, die während der Entwicklung des Projekts benötigt werden, wie Bibliotheken zum Testen, aber nicht für dessen Betrieb erforderlich sind) der Dateipackage.jsonenthältdevDependencies.
▍ Pack Update
Verwenden Sie den folgenden Befehl, um Pakete zu aktualisieren:
 npm update 
Nach Erhalt dieses Befehls überprüft npm alle Pakete auf ihre neuen Versionen. Wenn sie ihre neuen Versionen finden, die den in 
package.json angegebenen 
package.json , installieren Sie sie.
Sie können auch ein separates Paket aktualisieren:
 npm update <package-name> 
▍Laden von Paketen bestimmter Versionen
Zusätzlich zu den Standard-Paket-Downloads unterstützt npm auch das Herunterladen bestimmter Versionen davon. Insbesondere kann angemerkt werden, dass einige Bibliotheken nur mit bestimmten großen Versionen anderer Bibliotheken kompatibel sind, dh wenn die Abhängigkeiten solcher Bibliotheken ohne Berücksichtigung der Versionen installiert würden, könnte dies ihre Arbeit stören. Die Möglichkeit, eine bestimmte Version eines Pakets zu installieren, ist in Situationen nützlich, in denen beispielsweise die neueste Version dieses Pakets für Sie gut geeignet ist, sich jedoch herausstellt, dass ein Fehler darin vorliegt. Während Sie auf die Veröffentlichung einer festen Version des Pakets warten, können Sie die ältere, aber stabile Version verwenden.
Die Möglichkeit, bestimmte Versionen der für das Projekt erforderlichen Bibliotheken anzugeben, ist bei der Teamentwicklung hilfreich, wenn alle Teammitglieder genau dieselben Bibliotheken verwenden. Der Übergang zu den neuen Versionen erfolgt ebenfalls zentral, indem Änderungen an der 
package.json werden.
In all diesen Fällen ist die Möglichkeit, die für das Projekt erforderlichen Paketversionen anzugeben, äußerst nützlich. Npm folgt dem Standard der semantischen Versionierung (Semver).
▍Skripte ausführen
Die Datei 
package.json unterstützt die Fähigkeit, Befehle (Skripte) zu beschreiben, die mit dieser Konstruktion gestartet werden können:
 npm <task-name> 
So sieht beispielsweise die Liste der Skripte im entsprechenden Abschnitt der Datei aus:
 { "scripts": {   "start-dev": "node lib/server-development",   "start": "node lib/server-production" } } 
Es ist sehr üblich, diese Funktion zum Starten von Webpack zu verwenden:
 { "scripts": {   "watch": "webpack --watch --progress --colors --config webpack.conf.js",   "dev": "webpack --progress --colors --config webpack.conf.js",   "prod": "NODE_ENV=production webpack -p --config webpack.conf.js", } } 
Dieser Ansatz ermöglicht es, die Eingabe langer, fehlerbehafteter Befehle durch die folgenden einfachen Konstruktionen zu ersetzen:
 $ npm watch $ npm dev $ npm prod 
▍Wo installiert npm Pakete?
Bei der Installation von Paketen mit npm (oder 
Garn ) stehen zwei Installationsoptionen zur Verfügung: lokal und global.
Wenn Sie 
npm install lodash einen Befehl wie 
npm install lodash , wird das Paket 
node_modules Ordner 
node_modules im Projektordner 
node_modules . Wenn der obige Befehl ausgeführt wurde, fügt npm außerdem einen Eintrag für die 
lodash Bibliothek zum Abschnitt " 
dependencies " der Datei 
package.json , die sich im aktuellen Verzeichnis befindet.
Die globale Installation von Paketen erfolgt mit dem Flag 
-g :
 npm install -g lodash 
Durch Ausführen eines solchen Befehls installiert npm das Paket nicht im lokalen Ordner des Projekts. Stattdessen werden die Paketdateien an einen globalen Speicherort kopiert. Wohin gehen diese Dateien genau?
Verwenden Sie den folgenden Befehl, um dies herauszufinden:
 npm root -g 
Unter MacOS oder Linux werden Paketdateien möglicherweise im 
/usr/local/lib/node_modules . Unter Windows kann es sich um 
C:\Users\YOU\AppData\Roaming\npm\node_modules .
Wenn Sie jedoch Node.js nvm für die Versionskontrolle verwenden, kann sich der Pfad zum globalen Paketordner ändern.
Zum Beispiel verwende ich nvm und der obige Befehl sagt mir, dass globale Pakete unter dieser Adresse installiert sind: 
/Users/flavio/.nvm/versions/node/v8.9.0/lib/node_modules .
▍Verwenden und ausführen Sie Pakete, die mit npm installiert wurden
Wie werden Module verwendet, die mit npm lokal oder global installiert wurden und in die Ordner 
node_modules ? Angenommen, Sie haben die beliebte 
lodash Bibliothek installiert, die viele 
lodash enthält, die bei der JavaScript-Entwicklung verwendet werden:
 npm install lodash 
Ein solcher Befehl installiert die Bibliothek im lokalen Ordner des 
node_modules Projekts.
Um es in Ihrem Code zu verwenden, importieren Sie es einfach mit dem Befehl 
require :
 const _ = require('lodash') 
Was ist, wenn das Paket eine ausführbare Datei ist?
In diesem Fall wird die ausführbare Datei im 
node_modules/.bin/ folder .
Sie können sehen, wie dieser Mechanismus funktioniert, indem Sie das 
Cowsay- Paket installieren. Es ist ein Comic-Programm, das für die Befehlszeile geschrieben wurde. Wenn Sie in der Konsole im Stil der ASCII-Grafik Text an dieses Paket übergeben, wird ein Bild einer Kuh angezeigt, das den entsprechenden Text „ausspricht“. Andere Kreaturen können den Text „aussprechen“.
Nach der Installation des Pakets mit dem 
npm install cowsay wird es zusammen mit seinen Abhängigkeiten in 
node_modules . Und in den versteckten Ordner 
.bin werden symbolische Links zu Caysay-Binärdateien geschrieben.
Wie führe ich sie aus?
Natürlich können 
./node_modules/.bin/cowsay im Terminal so etwas wie 
./node_modules/.bin/cowsay , um das Programm aufzurufen. Dies ist ein funktionierender Ansatz, aber es ist viel besser, 
npx zu verwenden, ein Tool zum Starten von ausführbaren Dateien des npm-Pakets, das seit Version 5.2 in npm enthalten ist. In unserem Fall benötigen wir nämlich den folgenden Befehl:
 npx cowsay 
Der Pfad zum npx-Paket wird automatisch gefunden.
Package.json-Datei
Die Datei 
package.json ist ein wesentliches Element vieler Projekte, die auf dem Node.js-Ökosystem basieren. Wenn Sie in JavaScript programmiert haben, egal ob es sich um eine Server- oder Client-Entwicklung handelt, haben Sie diese Datei wahrscheinlich bereits gesehen. Warum wird es benötigt? Was solltest du über ihn wissen und welche Möglichkeiten bietet er dir?
Package.json ist eine Art Manifestdatei für ein Projekt. Er stellt dem Entwickler viele verschiedene Möglichkeiten zur Verfügung. Beispielsweise stellt es das zentrale Repository mit Einstellungen für die im Projekt verwendeten Tools dar. Darüber hinaus schreiben 
npm und 
yarn Informationen zu den Namen und Versionen der installierten Pakete.
▍ Dateistruktur
Hier ist ein Beispiel für eine einfache 
package.json Datei:
 { } 
Wie Sie sehen können, ist es leer. Es gibt keine strengen Anforderungen, was in einer solchen Datei für eine bestimmte Anwendung vorhanden sein soll. Die einzige Voraussetzung für die Dateistruktur ist, dass sie den Regeln des JSON-Formats entspricht. Andernfalls kann diese Datei nicht von Programmen gelesen werden, die versuchen, auf ihren Inhalt zuzugreifen.
Wenn Sie ein Node.js-Paket erstellen, das Sie über npm verteilen möchten, ändert sich alles radikal, und Ihre 
package.json sollte über eine Reihe von Eigenschaften verfügen, die anderen 
package.json Verwendung des Pakets helfen. Wir werden später mehr darüber sprechen.
Hier ist ein weiteres Beispiel 
package.json :
 { "name": "test-project" } 
Es legt die Eigenschaft 
name , deren Wert der Name der Anwendung oder des Pakets ist, deren Materialien sich in demselben Ordner befinden, in dem sich diese Datei befindet.
Hier ist ein komplizierteres Beispiel, das ich einer Beispielanwendung entnommen habe, die mit Vue.js geschrieben wurde:
 { "name": "test-project", "version": "1.0.0", "description": "A Vue.js project", "main": "src/main.js", "private": true, "scripts": {   "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",   "start": "npm run dev",   "unit": "jest --config test/unit/jest.conf.js --coverage",   "test": "npm run unit",   "lint": "eslint --ext .js,.vue src test/unit",   "build": "node build/build.js" }, "dependencies": {   "vue": "^2.5.2" }, "devDependencies": {   "autoprefixer": "^7.1.2",   "babel-core": "^6.22.1",   "babel-eslint": "^8.2.1",   "babel-helper-vue-jsx-merge-props": "^2.0.3",   "babel-jest": "^21.0.2",   "babel-loader": "^7.1.1",   "babel-plugin-dynamic-import-node": "^1.2.0",   "babel-plugin-syntax-jsx": "^6.18.0",   "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",   "babel-plugin-transform-runtime": "^6.22.0",   "babel-plugin-transform-vue-jsx": "^3.5.0",   "babel-preset-env": "^1.3.2",   "babel-preset-stage-2": "^6.22.0",   "chalk": "^2.0.1",   "copy-webpack-plugin": "^4.0.1",   "css-loader": "^0.28.0",   "eslint": "^4.15.0",   "eslint-config-airbnb-base": "^11.3.0",   "eslint-friendly-formatter": "^3.0.0",   "eslint-import-resolver-webpack": "^0.8.3",   "eslint-loader": "^1.7.1",   "eslint-plugin-import": "^2.7.0",   "eslint-plugin-vue": "^4.0.0",   "extract-text-webpack-plugin": "^3.0.0",   "file-loader": "^1.1.4",   "friendly-errors-webpack-plugin": "^1.6.1",   "html-webpack-plugin": "^2.30.1",   "jest": "^22.0.4",   "jest-serializer-vue": "^0.3.0",   "node-notifier": "^5.1.2",   "optimize-css-assets-webpack-plugin": "^3.2.0",   "ora": "^1.2.0",   "portfinder": "^1.0.13",   "postcss-import": "^11.0.0",   "postcss-loader": "^2.0.8",   "postcss-url": "^7.2.1",   "rimraf": "^2.6.0",   "semver": "^5.3.0",   "shelljs": "^0.7.6",   "uglifyjs-webpack-plugin": "^1.1.1",   "url-loader": "^0.5.8",   "vue-jest": "^1.0.2",   "vue-loader": "^13.3.0",   "vue-style-loader": "^3.0.1",   "vue-template-compiler": "^2.5.2",   "webpack": "^3.6.0",   "webpack-bundle-analyzer": "^2.9.0",   "webpack-dev-server": "^2.9.1",   "webpack-merge": "^4.1.0" }, "engines": {   "node": ">= 6.0.0",   "npm": ">= 3.0.0" }, "browserslist": [   "> 1%",   "last 2 versions",   "not ie <= 8" ] } 
Wie Sie sehen können, gibt es nur viele interessante Dinge. Folglich können hier folgende Eigenschaften unterschieden werden:
- name- Legt den Namen der Anwendung (des Pakets) fest.
- version- enthält Informationen zur aktuellen Version der Anwendung.
- description- eine kurze Beschreibung der Anwendung.
- main- Legt den Einstiegspunkt für die Anwendung fest.
- private- Wenn diese Eigenschaft auf- true, wird verhindert, dass das Paket versehentlich in npm veröffentlicht wird.
- scripts- Definiert eine Reihe von Node.js-Skripten, die ausgeführt werden können.
- dependencies- enthält eine Liste von npm-Paketen, von denen die Anwendung abhängt.
- devDependencies- enthält eine Liste von npm-Paketen, die beim Entwickeln eines Projekts verwendet werden, jedoch nicht, wenn es wirklich funktioniert.
- engines- Legt die Liste der Node.js-Versionen fest, auf denen die Anwendung ausgeführt wird.
- browserlist-- browserlistzum Speichern der Liste der Browser (und ihrer Versionen), die die Anwendung unterstützen soll.
Alle diese Eigenschaften werden entweder von npm oder von anderen Tools verwendet, die während des gesamten Anwendungslebenszyklus verwendet werden.
▍Eigenschaften, die in package.json verwendet werden
Lassen Sie uns über die Eigenschaften sprechen, die in 
package.json verwendet werden 
package.json . Hier werden wir den Begriff "Paket" verwenden, aber alles, was über Pakete gesagt wird, gilt auch für lokale Anwendungen, die nicht als Pakete verwendet werden sollen.
Die meisten der von uns beschriebenen Eigenschaften werden nur für die Anforderungen des npm- 
Repositorys verwendet . Einige werden von Programmen verwendet, die mit Code wie demselben npm interagieren.
Name Eigenschaft
Die 
name Eigenschaft legt den Namen des Pakets fest:
 "name": "test-project" 
Der Name muss kürzer als 214 Zeichen sein, darf keine Leerzeichen enthalten und darf nur aus Großbuchstaben, Bindestrichen ( 
- ) und Unterstrichen ( 
_ ) bestehen.
Ähnliche Einschränkungen bestehen, da bei der Veröffentlichung eines Pakets in npm dessen Name zur Bildung der URL der Paketseite verwendet wird.
Wenn Sie den Paketcode auf GitHub in der Public Domain veröffentlicht haben, ist der Name des entsprechenden GitHub-Repositorys eine gute Option für den Paketnamen.
Autor Eigentum
Die Eigenschaft 
author enthält Informationen zum Autor des Pakets:
 { "author": "Flavio Copes <flavio@flaviocopes.com> (https://flaviocopes.com)" } 
Es kann im folgenden Format dargestellt werden:
 { "author": {   "name": "Flavio Copes",   "email": "flavio@flaviocopes.com",   "url": "https://flaviocopes.com" } } 
Mitwirkende Eigentum
Die Eigenschaft " 
contributors enthält ein Array mit Informationen zu den Personen, die zum Projekt beigetragen haben:
 { "contributors": [   "Flavio Copes <flavio@flaviocopes.com> (https://flaviocopes.com)" ] } 
Diese Eigenschaft kann folgendermaßen aussehen:
 { "contributors": [   {     "name": "Flavio Copes",     "email": "flavio@flaviocopes.com",     "url": "https://flaviocopes.com"   } ] } 
Bugs Eigenschaft
Die Eigenschaft 
bugs enthält einen Link zum Bug-Tracker des Projekts. Es ist sehr wahrscheinlich, dass ein solcher Link zur Seite des GitHub-Fehlerverfolgungssystems führt:
 { "bugs": "https://github.com/flaviocopes/package/issues" } 
Homepage-Eigenschaft
Mit der 
homepage Eigenschaft können Sie die Paket-Homepage festlegen:
 { "homepage": "https://flaviocopes.com/package" } 
Versionseigenschaft
Die 
version Eigenschaft enthält Informationen zur aktuellen Version des Pakets:
 "version": "1.0.0" 
Wenn Sie den Wert dieser Eigenschaft bilden, müssen Sie die Regeln der 
semantischen Versionierung befolgen. Dies bedeutet insbesondere, dass die Versionsnummer immer dreistellig dargestellt wird: xxx
Die erste Nummer ist die Hauptversion des Pakets, die zweite ist die Nebenversion, die dritte ist die Patch-Version.
Das Ändern dieser Zahlen hat eine bestimmte Bedeutung. Die Veröffentlichung eines Pakets, in dem Fehler nur korrigiert werden, führt somit zu einer Wertsteigerung der Patch-Version. Wenn ein Paket freigegeben wird, dessen Änderungen abwärtskompatibel mit der vorherigen Version sind, ändert sich die Nebenversion. Hauptversionen von Paketen können Änderungen enthalten, die diese Pakete mit Paketen früherer Hauptversionen nicht kompatibel machen.
Lizenz Eigentum
Die 
license Eigenschaft enthält Informationen zur Paketlizenz:
 "license": "MIT" 
Keywords-Eigenschaft
Die Eigenschaft 
keywords enthält eine Reihe von Schlüsselwörtern, die sich auf die Paketfunktionalität beziehen:
 "keywords": [ "email", "machine learning", "ai" ] 
Die richtige Auswahl von Schlüsselwörtern hilft den Nutzern bei der Suche nach Paketen zur Lösung bestimmter Probleme zu finden, was sie benötigen, ermöglicht es Ihnen, Pakete zu gruppieren und ihre möglichen Funktionen beim Anzeigen der npm-Site schnell zu bewerten.
Beschreibungseigenschaft
Die 
description Eigenschaft enthält eine kurze Beschreibung des Pakets:
 "description": "A package to work with strings" 
Diese Eigenschaft ist besonders wichtig, wenn Sie das Paket in npm veröffentlichen möchten, da Benutzer der npm-Site den Zweck des Pakets verstehen können.
Repository-Eigenschaft
Die 
repository Eigenschaft gibt an, wo sich das Paket-Repository befindet:
 "repository": "github:flaviocopes/testing", 
Beachten Sie, dass der Wert dieser Eigenschaft das Präfix 
github . Npm unterstützt auch Präfixe für einige andere beliebte Dienste dieser Art:
 "repository": "gitlab:flaviocopes/testing", "repository": "bitbucket:flaviocopes/testing", 
Das bei der Entwicklung des Pakets verwendete Versionskontrollsystem kann auch explizit festgelegt werden:
 "repository": { "type": "git", "url": "https://github.com/flaviocopes/testing.git" } 
Das gleiche Paket kann verschiedene Versionskontrollsysteme verwenden:
 "repository": { "type": "svn", "url": "..." } 
Eigenschaft main
Die 
main legt den Einstiegspunkt für das Paket fest:
 "main": "src/main.js" 
Wenn ein Paket in die Anwendung importiert wird, wird hier die Suche nach dem ausgeführt, was das entsprechende Modul exportiert.
Privateigentum
Die auf 
true gesetzte 
private verhindert 
true dass das Paket versehentlich in npm veröffentlicht wird:
 "private": true 
Scripts-Eigenschaft
Die Eigenschaft 
scripts legt die Liste der Skripte oder Dienstprogramme fest, die mit den npm-Tools gestartet werden können:
 "scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "unit": "jest --config test/unit/jest.conf.js --coverage", "test": "npm run unit", "lint": "eslint --ext .js,.vue src test/unit", "build": "node build/build.js" } 
Diese Skripte sind Befehlszeilenanwendungen. Sie können sie mit npm bzw. garn ausführen, indem Sie Befehle der Form 
npm run XXXX oder 
yarn XXXX ausführen, wobei 
XXXX der Name des Skripts ist. Zum Beispiel könnte es so aussehen:
 npm run dev 
Skripte können beliebig aufgerufen werden und fast alles tun, was ein Entwickler möchte.
Abhängigkeitseigenschaft
Die Eigenschaft 
dependencies enthält eine Liste der als Paketabhängigkeiten installierten npm-Pakete:
 "dependencies": { "vue": "^2.5.2" } 
Bei der Installation eines Pakets mit npm oder Garn werden die folgenden Befehle verwendet:
 npm install <PACKAGENAME> yarn add <PACKAGENAME> 
Diese Pakete werden automatisch zur Liste der Abhängigkeiten des zu entwickelnden Pakets hinzugefügt.
DevDependencies-Eigenschaft
Die Eigenschaft 
devDependencies enthält eine Liste der als Entwicklungsabhängigkeiten installierten npm-Pakete:
 "devDependencies": { "autoprefixer": "^7.1.2", "babel-core": "^6.22.1" } 
Diese Liste unterscheidet sich von der Liste, die in der Eigenschaft 
dependencies gespeichert ist, da die darin verfügbaren Pakete nur im System des Paketentwicklers installiert sind und in der praktischen Verwendung des Pakets nicht verwendet werden.
Pakete fallen in diese Liste, wenn sie wie folgt mit npm oder Garn installiert werden:
 npm install --dev <PACKAGENAME> yarn add --dev <PACKAGENAME> 
Engines Eigentum
Die 
engines Eigenschaft gibt an, welche Versionen von Node.js und anderen Softwareprodukten zur Bereitstellung des Pakets verwendet werden:
 "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0", "yarn": "^0.13.0" } 
Browserlist-Eigenschaft
Mit der Eigenschaft 
browserlist können 
browserlist , welche Browser (und deren Versionen) vom Paketentwickler unterstützt werden sollen:
 "browserslist": [ "> 1%", "last 2 versions", "not ie <= 8" ] 
Diese Eigenschaft wird von Babel, Autoprefixer und anderen Tools verwendet. Durch die Analyse dieser Liste können sie dem Paket nur die Polyfills und Hilfsmechanismen hinzufügen, die für die aufgelisteten Browser erforderlich sind.
Der Wert der hier als Beispiel gezeigten 
browserlist Eigenschaft bedeutet, dass Sie mindestens 2 Hauptversionen aller Browser mit mindestens 1% Nutzung unterstützen möchten (diese Daten stammen von 
CanIUse.com ), mit Ausnahme von IE 8 und älteren Versionen dieses Browsers (mehr Dies finden Sie auf der 
Paketseite der 
Browserlisten .
▍Speichern Sie in den package.json-Einstellungen für verschiedene Softwaretools
In 
package.json Sie Einstellungen für verschiedene Hilfstools wie Babel oder ESLint speichern.
Jedes dieser Tools verfügt über eine spezielle Eigenschaft wie 
eslintConfig oder 
babel . Details zur Verwendung solcher Eigenschaften finden Sie in der Dokumentation der jeweiligen Projekte.
▍Über Paketversionen und semantische Versionierung
, , , . , 
~3.0.0 ^0.13.0 . , , .
, , , , :
- ~:- ~0.13.0, - . ,- 0.13.1,- 0.14.0— .
- ^:- ^0.13.0, , - . ,- 0.13.1,- 0.14.0, .
- *: , , , — .
- >: , .
- >=: , .
- <=: , .
- <: , .
- =: .
- -: , —- 2.1.0 - 2.6.2.
- ||: , .- < 2.1 || > 2.6.
:
, , -. , 
1.0.0 || >=1.1.0 <1.2.0 , 
1.0.0 , , 
1.1.0 , 
1.2.0 .
package-lock.json
package-lock.json npm 5. Node.js-. ? , 
package.json , .
, , , , .
, 
package.json . 
package.json , (- ) .
Git 
node_modules , . , 
npm install , , , 
~ , -, , , -.
^ . , , , .
, - , 
npm install . , . , , - , , , ( ) .
package-lock.json npm 
npm install .
, , ( Composer PHP) .
package-lock.json Git-, , , , , Git .
package-lock.json npm update .
▍ package-lock.json
package-lock.json , cowsay, npm 
install cowsay :
 { "requires": true, "lockfileVersion": 1, "dependencies": {   "ansi-regex": {     "version": "3.0.0",     "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3. 0.0.tgz",     "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="   },   "cowsay": {     "version": "1.3.1",     "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz" ,     "integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkM Ajufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==",     "requires": {       "get-stdin": "^5.0.1",       "optimist": "~0.6.1",       "string-width": "~2.1.1",       "strip-eof": "^1.0.0"     }   },   "get-stdin": {     "version": "5.0.1",     "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0. 1.tgz",     "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g="   },   "is-fullwidth-code-point": {     "version": "2.0.0",     "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/ is-fullwidth-code-point-2.0.0.tgz",     "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="   },   "minimist": {     "version": "0.0.10",     "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10 .tgz",     "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="   },   "optimist": {     "version": "0.6.1",     "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",     "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",     "requires": {       "minimist": "~0.0.1",       "wordwrap": "~0.0.2"     }   },   "string-width": {     "version": "2.1.1",     "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",     "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",     "requires": {       "is-fullwidth-code-point": "^2.0.0",       "strip-ansi": "^4.0.0"     }   },   "strip-ansi": {     "version": "4.0.0",     "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",     "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",     "requires": {       "ansi-regex": "^3.0.0"     }   },   "strip-eof": {     "version": "1.0.0",     "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",     "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="   },   "wordwrap": {     "version": "0.0.3",     "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",     "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="   } } } 
. cowsay, :
- get-stdin
- optimist
- string-width
- strip-eof
, , , 
requires , :
- ansi-regex
- is-fullwidth-code-point
- minimist
- wordwrap
- strip-eof
, 
version , 
resolved , , 
integrity , .
npm 
package.json package-lock.json . npm npx.
Liebe Leser! — npm yarn?
