Nodejs Kapitel 4 (Npm-Installationsprinzip)

Was passiert, wenn npm install ausgeführt wird?

Zunächst werden die installierten Abhängigkeiten in node_modules im Stammverzeichnis gespeichert. Standardmäßig werden sie flach installiert und die Sortierregeln lauten zuerst .bin, dann @ series und dann abcd nach dem ersten Buchstaben usw., und der verwendete Algorithmus ist die Breitendurchquerung. Beim Durchlaufen des Abhängigkeitsbaums verarbeitet npm zunächst die Abhängigkeiten im Stammverzeichnis des Projekts und verarbeitet dann die Abhängigkeiten jedes abhängigen Pakets Schicht für Schicht, bis alle Abhängigkeiten vorhanden sind verarbeitet. Bei der Verarbeitung jeder Abhängigkeit prüft npm, ob die Versionsnummer der Abhängigkeit mit den Versionsanforderungen anderer Abhängigkeiten im Abhängigkeitsbaum übereinstimmt, und wenn nicht, versucht es, die entsprechende Version zu installieren

Bild.png

Wohnung?

Eine Abflachung ist nur wie folgt ideal

Bild.png

Wenn bei der Installation eines sekundären Moduls ein Modul mit demselben Namen und derselben Version auf der ersten Ebene gefunden wird, wird dieses Modul direkt wiederverwendet

Da das C-Modul unter dem A-Modul auf der ersten Ebene installiert ist, kann das B-Modul das C-Modul auf derselben Ebene wiederverwenden; Name und Version sind gleich

nicht idealer Zustand

Bild.png

Da die von B und A benötigten abhängigen Module unterschiedlich sind (die Anforderung unter B ist C von v2.0 und die Anforderung von C unter A ist C von v1.0), kann B das Modul C v1.0 unter nicht wiederverwenden A wie in 2. Wenn in dieser Situation immer noch Modulredundanz auftritt, erstellt er weiterhin eine Schicht von node_modules für B, die nicht flach ist.

NPM-Installationsfolgeprozess

Bild.png

Der spezifische Prozess ist in der Abbildung dargestellt und sehr detailliert.

Was npmrc konfigurieren kann, gebe ich Ihnen als Demo-Referenz

registry=http://registry.npmjs.org/
# 定义npm的registry,即npm的包下载源

proxy=http://proxy.example.com:8080/
# 定义npm的代理服务器,用于访问网络

https-proxy=http://proxy.example.com:8080/
# 定义npm的https代理服务器,用于访问网络

strict-ssl=true
# 是否在SSL证书验证错误时退出

cafile=/path/to/cafile.pem
# 定义自定义CA证书文件的路径

user-agent=npm/{npm-version} node/{node-version} {platform}
# 自定义请求头中的User-Agent

save=true
# 安装包时是否自动保存到package.json的dependencies中

save-dev=true
# 安装包时是否自动保存到package.json的devDependencies中

save-exact=true
# 安装包时是否精确保存版本号

engine-strict=true
# 是否在安装时检查依赖的node和npm版本是否符合要求

scripts-prepend-node-path=true
# 是否在运行脚本时自动将node的路径添加到PATH环境变量中

Die Rolle von package-lock.json

Viele Freunde wissen nur, dass dieses Ding die Details des Versionsdatensatz-Abhängigkeitsbaums sperren kann

  • version Dieser Parameter gibt die Versionsnummer des aktuellen Pakets an
  • gelöst Dieser Parameter gibt die Download-Adresse des aktuellen Pakets an
  • Integrität wird verwendet, um die Integrität des Pakets zu überprüfen
  • dev Dieser Parameter gibt an, dass das aktuelle Paket ein Entwicklungsabhängigkeitspaket ist
  • bin Dieser Parameter gibt den Pfad und Namen der ausführbaren Datei im aktuellen Paket an
  • Engines Dieser Parameter gibt den Node.js-Versionsbereich an, von dem das aktuelle Paket abhängt

Der Wissenspunkt ist hier: package-lock.json hilft uns beim Cachen. name + version + integrityDurch die Informationen wird ein eindeutiger Schlüssel generiert. Dieser Schlüssel kann den entsprechenden Cache-Datensatz unter index-v5 finden, der sich im npm-Cache-Ordner befindet

Bild.png

Wenn ein Cache-Datensatz gefunden wird, wird der Hash-Wert des TAR-Pakets ermittelt und dann die entsprechende Binärdatei in node_modeules dekomprimiert

Bild.png

おすすめ

転載: juejin.im/post/7261119531891490877