Node.js-Handbuch, Teil 4: Dateien npm, package.json und package-lock.json

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 .




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 --save Flag --save können --save ein Paket installieren und dem Abschnitt " dependencies " der Datei package.json einen 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-dev können Sie das Paket installieren und einen Eintrag darüber zu dem Abschnitt hinzufügen, der eine Liste der Entwicklungsabhängigkeiten ( --save-dev Pakete, die während der Entwicklung des Projekts benötigt werden, wie Bibliotheken zum Testen, aber nicht für dessen Betrieb erforderlich sind) der Datei package.json enthält devDependencies .

▍ 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 - browserlist zum 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 .

:

  • : , , - .
  • latest : , .

, , -. , 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?

Source: https://habr.com/ru/post/de423703/


All Articles