ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python ΠΈ Objective-C Π² Mac OS

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python ΠΈ Objective-C ΠΏΠΎΠ΄ Mac OS ΠΈ для iPhone / iPod Touch

Package lock json: Page not found Β· GitHub Pages

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

javascript — Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ package-lock.json?

Π”ΠΎΠ±Ρ€ΠΎΠ΅ врСмя суток.
Π― ΠΏΠΎΡ‡ΠΈΡ‚Π°Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΊ NPM, ΠΏΠΎΡ‡ΠΈΡ‚Π°Π» Ρ„ΠΎΡ€ΡƒΠΌΡ‹, Π½ΠΎ всё Ρ€Π°Π²Π½ΠΎ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π½Π΅ совсСм понимаю, ΡΠΌΡ‹ΡΠ»ΠΎΠ²ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ этого Ρ„Π°ΠΉΠ»Π°.

Π’ΠΎΡ‚ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ описано Π½Π° npm Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для фиксации Π² исходных Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ… ΠΈ
ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ:

1) ΠžΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ СдинствСнноС прСдставлСниС Π΄Π΅Ρ€Π΅Π²Π° зависимостСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰ΠΈ
ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅, разворачивая ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ
установил ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ зависимости.

2) ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Β«ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈΒ» ΠΊ
ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ состояниям node_modules Π±Π΅Π· фиксации самого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

3) Для облСгчСния большСй видимости ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π΄Π΅Ρ€Π΅Π²Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ…
исходных тСкстов контроля.

4) И ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс установки, позволяя npm ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ
ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ установлСнныС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹.

Вопрос сразу ΠΏΠΎ 1 ΠΏΡƒΠ½ΠΊΡ‚Ρƒ, ΠΈΠ±ΠΎ Ρƒ мСня package.json ΠΈ package-lock.json Π½Π΅ Π² Π³ΠΈΡ‚ ΠΈΠ³Π½ΠΎΡ€Π΅! Они комитятся.
И ΠΊΠ°ΠΊ написано Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΡˆΠΊΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ npm i, ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ устанавливаСт зависимости, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ описаны Π² Ρ„Π°ΠΉΠ»Π΅ package.json.
И скачав ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΌΡ‹ ΠΈΠ΄Π΅ΠΌ Π²Π½ΡƒΡ‚Ρ€ΡŒ Π½Π΅Ρ‘ ΠΈ устанавливаСм Π΅Ρ‘ зависимости (ΠΈ Ρ‚Π°ΠΊ рСкурсивно).
На Π΄Π°Π½Π½ΠΎΠΌ этапС Π² package-lock.json просто выводится информация ΠΊΠ°ΠΊΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ зависимости основных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΌΡ‹ скачали.
Как ΠΎΠ½ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ «Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ установил ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ зависимости» ?

И это всё ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· 3 ΠΏΡƒΠ½ΠΊΡ‚Π°.

Ну ΠΈ согласСн с 4 ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ, ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ Ссли Π² node_modules ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ (с Ρ‚ΠΎΠΉ ΠΆΠ΅ вСрсиСй ΠΈ Ρ…Π΅ΡˆΠ΅ΠΌ), Ρ‚ΠΎ Π΅Π³ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚. НО, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ эту ΠΈΠ½Ρ„Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π΅ ΠΏΠΎ package-lock.json, Π° Π² зависимостях основного ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΈΠ±ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΈΠ±Ρ‹ Π΅ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ package.json. Π’.Π΅ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» получаСтся.

Π’Π΅Ρ€Π½ΠΎ Π»ΠΈ я всС понимаю? ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΠΎΠΏΡ€Π°Π²ΡŒΡ‚Π΅!

РазбираСмся с lock-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π² NPM 5 | by Andrey Melikhov | devSchacht

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ JiΕ™Γ­ PospΓ­Ε‘il: Understanding lock files in NPM 5. ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π°Π²Ρ‚ΠΎΡ€Π°.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ маТорная вСрсия NPM приносит ряд ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ вСрсиями с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния скорости, бСзопасности ΠΈ мноТСства Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ. Однако самым Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ являСтся Π½ΠΎΠ²Ρ‹ΠΉ lock-Ρ„Π°ΠΉΠ». ЀактичСски, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас нСсколько lock-Ρ„Π°ΠΉΠ»ΠΎΠ²: «старый» npm-shrinkwrap.json ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ package-lock.json. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅, Π° ΠΏΠΎΠΊΠ° нСбольшая вводная для нСпосвящённых. Π€Π°ΠΉΠ» package.json описываСт зависимости Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ semver. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅. Lock-Ρ„Π°ΠΉΠ» β€” это ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ снимок всСго Π΄Π΅Ρ€Π΅Π²Π° зависимостСй, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ ΠΈΡ… установлСнныС вСрсии.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии, lock-Ρ„Π°ΠΉΠ» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΠ»Π΅ цСлостности (integrity), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ Subresource Integrity (SRI) для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ установливаСмый ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Π» ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ‘Π½ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ нСдСйствитСлСн. Π’ настоящСС врСмя ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ SHA-1 для ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ NPM ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии, ΠΈ SHA-512 для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ.

Π’ Ρ„Π°ΠΉΠ»Π΅ большС Π½Π΅Ρ‚ поля from, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ вмСстС с ΠΈΠ½ΠΎΠ³Π΄Π° нСконсистСнтной version, ΠΊΠ°ΠΊ извСстно, Π±Ρ‹Π»ΠΎ источником Π±ΠΎΠ»ΠΈ ΠΏΡ€ΠΈ просмотрС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ² Π²ΠΎ врСмя процСсса ΠΊΠΎΠ΄-Ρ€Π΅Π²ΡŒΡŽ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ измСнСния Π² ΠΏΡƒΠ»Π»-рСквСстах Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡ΠΈΡ‰Π΅.

Lock-Ρ„Π°ΠΉΠ» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ содСрТит Π²Π΅Ρ€ΡΠΈΡŽ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π² ΠΏΠΎΠ»Π΅ lockfileVersion, ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… обновлСниях Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π΅ придётся ΡƒΠ³Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ lock-Ρ„Π°ΠΉΠ». ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ поддСрТиваСтся ΠΈ распознаСтся ΠΊΠ°ΠΊ вСрсия 0.

{
"name": "package-name",
"version": "1.0.0",
"lockfileVersion": 1,
"dependencies": {
"cacache": {
"version": "9.2.6",
"resolved": "https://registry.npmjs.org/cacache/-/cacache-9.2.6.tgz",
"integrity": "sha512-YK0Z5Np5t755edPL6gfdCeGxtU0rcW/DBhYhYVDckT+7AFkCCtedf2zru5NRbBLFk6e7Agi/RaqTOAfiaipUfg=="
},
"duplexify": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz",
"integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=",
"dependencies": {
"end-of-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz",
"integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4="
},

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ resolved всС Π΅Ρ‰Π΅ присутствуСт Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ URI. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ‡Ρ‚ΠΎ NPM Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ (Π½Π° основС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² .npmrc), Ρ‡Ρ‚ΠΎ систСма настроСна Π½Π° использованиС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ рССстра, ΠΈ Ссли это Ρ‚Π°ΠΊ, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ вмСсто ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΏΠΎΠ»Π΅ΠΌ цСлостности, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΠΎΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ соотвСтствуСт сигнатурС, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ ΠΏΡ€ΠΈΡˆΠ΅Π».

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° Π²Π΅Ρ‰ΡŒ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ: lock-Ρ„Π°ΠΉΠ» Ρ‚ΠΎΡ‡Π½ΠΎ описываСт физичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ node_modules. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ этого Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Ссли Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии NPM, ΠΎΠ½ΠΈ всС Ρ€Π°Π²Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ вСрсии зависимостСй, Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². Π­Ρ‚ΠΈΠΌ NPM 5 отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Ρ… ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Yarn. Yarn описываСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ Π² плоском Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈ опираСтся Π½Π° свою Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ для создания структуры ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° структура Ρ‚Π°ΠΊΠΆΠ΅ измСнится. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ различиях ΠΌΠ΅ΠΆΠ΄Ρƒ Yarn ΠΈ NPM 5, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ lock-Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΠ·ΠΌ Yarn.

Π― ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π», Ρ‡Ρ‚ΠΎ сСйчас Π½Π° самом Π΄Π΅Π»Π΅ имССтся большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ lock-Ρ„Π°ΠΉΠ»Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ NPM автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ lock-Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ package-lock.json всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° устанавливаСтся новая Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ» Π΅Ρ‰Π΅ Π½Π΅ сущСствуСт. Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅, lock-Ρ„Π°ΠΉΠ» прСдставляСт собой ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ слСпок Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° зависимостСй ΠΈ позволяСт Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сборки ΠΌΠ΅ΠΆΠ΄Ρƒ машинами Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ рСкомСндуСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² свою систСму контроля вСрсий.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достигнуто с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ npm shrinkwrap ΠΈ Π΅Ρ‘ npm-shrinkwrap.json. И Π²Ρ‹ ΠΏΡ€Π°Π²Ρ‹. ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ создания Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° являСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ донСсСния мысли ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ NPM Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ зависимостСй, Ρ‡Ρ‚ΠΎ, Π²ΠΈΠ΄ΠΈΠΌΠΎ, Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ.

Однако Π΅ΡΡ‚ΡŒ нСсколько ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, NPM Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ package-lock.json Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ явно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² свойство Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΎΠ½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π­Ρ‚ΠΎ Π½Π΅ относится ΠΊ Ρ„Π°ΠΉΠ»Ρƒ npm-shrinkwrap.json, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΈ NPM Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π΄Π°ΠΆΠ΅ для Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… зависимостСй. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ сами, запустив npm pack ΠΈ посмотрСв, Ρ‡Ρ‚ΠΎ находится Π²Π½ΡƒΡ‚Ρ€ΠΈ созданного Π°Ρ€Ρ…ΠΈΠ²Π°.

Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсно ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС npm shrinkwrap Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ содСрТит package-lock.json. ΠžΡ‚Π²Π΅Ρ‚ довольно прост: NPM просто ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ΅Ρ‚ package-lock.json Π² npm-shrinkwrap.json. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ² совпадаСт.

Π‘Π°ΠΌΠΎΠ΅ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ спросят, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ±Π° Ρ„Π°ΠΉΠ»Π°. Π’ этом случаС NPM ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ package-lock.json ΠΈ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ npm-shrinkwrap.json. Однако такая ситуация Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ срСдствами NPM.

ΠžΠ±ΠΎΠ±Ρ‰Π°Ρ:

  • NPM автоматичСски создаст package-lock.json ΠΏΡ€ΠΈ установкС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Если ΡƒΠΆΠ΅ присутствуСт npm-shrinkwrap.json, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ использован ΠΎΠ½ (ΠΈ ΠΏΡ€ΠΈ нСобходимости ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½).
  • Новый package-lock.json Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ публикуСтся ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Π²Π°ΡˆΡƒ систСму контроля вСрсий.
  • Запуск npm shrinkwrap Π² случаС наличия package-lock.json просто ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² npm-shrinkwrap.json.
  • Когда ΠΎΠ±Π° Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, package-lock.json Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½.

Π­Ρ‚ΠΎ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ, Π½ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ lock-Ρ„Π°ΠΉΠ» вмСсто старого Π΄ΠΎΠ±Ρ€ΠΎΠ³ΠΎ shrinkwrap ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚? ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅.

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹), Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ lock-Ρ„Π°ΠΉΠ». ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ являСтся использованиС shrinkwrap, Π½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ вмСстС с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ (Π½ΠΎΠ²Ρ‹ΠΉ lock-Ρ„Π°ΠΉΠ» Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½ ΠΎΡ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ автоматичСски). ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ shrinkwrap? Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ NPM ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ shrinkwrap-Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, ΠΈ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ shrinkwrap всСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π²Ρ‹ Π½Π΅ смоТСтС Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π΅ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ NPM ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ зависимостСй Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Ссли Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ semver позволяСт это.1.0.0. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· устанавливаСтся вСрсия, указанная Π² lock-Ρ„Π°ΠΉΠ»Π΅ ΠΈ всё прСкрасно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. А Ρ‡Ρ‚ΠΎ происходит, Ссли публикуСтся новая вСрсия зависимости, случайно Π½Π°Ρ€ΡƒΡˆΠΈΠ²ΡˆΠ°Ρ semver, ΠΈ ваш ΠΏΠ°ΠΊΠ΅Ρ‚ ломаСтся ΠΈΠ·-Π·Π° этого?

К соТалСнию, Π²Ρ‹ Π½Π΅ смоТСтС Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ этого Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ появится ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎΠ± ошибкС. Π‘Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ lock-Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ваша сборка Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π² CI, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ послСдниС вСрсии зависимостСй ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ тСсты с Π½ΠΎΠ²ΠΎΠΉ сломанной вСрсиСй (ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ сборка выполняСтся пСриодичСски, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для PR). Однако ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ lock-Ρ„Π°ΠΉΠ»Π° CI-сСрвСр всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ.

Π•ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΆΠ΅Ρ€Ρ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ lock-Ρ„Π°ΠΉΠ» Π² свою систСму контроля вСрсий. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ сборки, которая Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ npm update ΠΏΠ΅Ρ€Π΅Π΄ запуском тСстов. Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, Π²Ρ‹ просто удаляСтС lock-Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅Π΄ запуском тСстов. Как Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ с сломанной Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π±Ρ‹Π»Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π°, это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π΅ΠΌΠ°, Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ semver, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ NPM, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ указания Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ списка ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… вСрсий.

Π­Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ставит вопрос ΠΎ Ρ‚ΠΎΠΌ, стоит Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ lock-Ρ„Π°ΠΉΠ» Π² систСму управлСния вСрсиями ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ. Однако слСдуСт ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ lock-Ρ„Π°ΠΉΠ» содСрТит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ runtime-зависимости, Π½ΠΎ ΠΈ зависимости для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (dev dependencies). Π’ этом смыслС Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ (смотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»).

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Ρ‡Ρ‚ΠΎ насчёт ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ для запуска Π² консоли ΠΈΠ»ΠΈ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ²? Π’ этом случаС ΠΏΠ°ΠΊΠ΅Ρ‚ β€” это ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ всСгда ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΈ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ зависимости, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΈΠΌΠ΅Π»ΠΈ ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ shrinkwrap ΠΈ Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ NPM использовал Π΅Π³ΠΎ Π²ΠΎ врСмя установки. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ выглядит ΠΏΠ°ΠΊΠ΅Ρ‚, Ссли ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ с использованиСм npm pack.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ вСрсии зависимостСй Π² package.json — Π½Π΅ Π»ΡƒΡ‡ΡˆΠ°Ρ идСя, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ всС подзависимости. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ вСрсия Π² package.json Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

Lock-Ρ„Π°ΠΉΠ»Ρ‹ npm / Π‘Π»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π”ΠΎΠΌΠšΠ»ΠΈΠΊ / Π₯Π°Π±Ρ€

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ постС ΠΌΡ‹ рассмотрСли экосистСму npm Π² качСствС источника хаоса Π² нашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, ΠΈ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ с ΡƒΠΌΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π²Ρ‹Π±ΠΎΡ€Ρƒ зависимостСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наши риски. БСгодня ΠΌΡ‹ ΠΏΠΎΠΉΠ΄Π΅ΠΌ дальшС ΠΈ рассмотрим lock-Ρ„Π°ΠΉΠ»Ρ‹ npm, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ Π½ΠΈΠΌ.

Как ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ, npm Π±Π΅Ρ€Ρ‘Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄Π΅ манифСст ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Ρ„Π°ΠΉΠ» package.json) ΠΈ описанныС Π² Π½Π΅ΠΌ зависимости, Π° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ локально ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ node_modules, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТатся всС установлСнныС зависимости.

НС Π±ΡƒΠ΄Π΅ΠΌ сСйчас ΠΊΠ°ΡΠ°Ρ‚ΡŒΡΡ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ структуры node_modules, ΠΎΠ΄Π½Π°ΠΊΠΎ Π·Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ установлСнныС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π΅ всСгда ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠ»ΠΎΡΠΊΡƒΡŽ структуру, Π° ΠΌΠΎΠ³ΡƒΡ‚ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… случаях Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это происходит, ΠΊΠΎΠ³Π΄Π° Π² Π΄Π΅Ρ€Π΅Π²Π΅ зависимостСй присутствуСт ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий. ΠŸΡ€ΠΈ этом сама структура Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС Π½Π΅ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° 100 %, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ, Π² Ρ‚ΠΎΠΌ числС, ΠΎΡ‚ порядка установки зависимостСй.

Π’Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии npm ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ установки зависимостСй, ΠΈ структура Ρ„Π°ΠΉΠ»ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ.

Π’Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ список зависимостСй Π² манифСстС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° содСрТит Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ вСрсий semver, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ зависимости? ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ установка зависимостСй Π² Ρ€Π°Π·Π½ΠΎΠ΅ врСмя Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ содСрТимоС npm registry постоянно мСняСтся, рСгулярно выходят Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ зависимостСй, Ρ‚ΠΎ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ зависимости (зависимости Π²Π°ΡˆΠΈΡ… зависимостСй) Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

А Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ситуация, ΠΊΠΎΠ³Π΄Π° содСрТимоС ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ Π² npm registry, Π±Ρ‹Π»ΠΎ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π±Π΅Π· обновлСния вСрсии. Π­Ρ‚ΠΎ называСтся ΠΌΡƒΡ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ npm registry, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² частных рССстрах Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. А Ρ‡Ρ‚ΠΎ, Ссли содСрТимоС ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π±Ρ‹Π»ΠΎ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ внСсти Π² ΠΊΠΎΠ΄ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π·Π°ΠΊΠ»Π°Π΄ΠΊΠΈ?

Учитывая всС эти Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹, становится ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ структура Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ node_modules ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π΄Π°ΠΆΠ΅ Ссли ваш манифСст ΠΏΡ€ΠΈ этом остаСтся Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌ.

Наивно Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ зависимости, прописывая строгиС вСрсии Π² манифСстС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (вмСсто Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² semver): ΠΊΠ°ΠΊ ΠΌΡ‹ рассмотрСли Π²Ρ‹ΡˆΠ΅, это Π½Π΅ даст сущСствСнных Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ зависимости всё Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ. Π”Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹ Π½Π΅ пСрСстанут Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° установку зависимостСй. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Π²Ρ‹ Π·Π°ΠΌΠΎΡ€ΠΎΠ·ΠΈΡ‚Π΅ ваши прямыС зависимости, Ρ‚ΠΎ получится ситуация, ΠΊΠΎΠ³Π΄Π° Π±ΠΎΠ»Π΅Π΅ старыС вСрсии Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±ΠΎΠ»Π΅Π΅ свСТими вСрсиями Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… зависимостСй, ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ это ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ нас Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ CI/CD ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ собираСт, тСстируСт ΠΈ Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ прилоТСния Π² Ρ€Π°Π·Π½Ρ‹Π΅ срСды выполнСния. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊ ID ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² Git (ΠΈΠ»ΠΈ ΠΊ Git-Ρ‚Π΅Π³Π°ΠΌ), ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ систСма Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊ Π²Ρ‹ΠΊΠ°Ρ‚ΠΊΠ΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ (Π°Ρ€Ρ…ΠΈΠ² с Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ для выполнСния Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π° Π²Ρ…ΠΎΠ΄ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° поступаСт ΠΊΠΎΠ΄ ΠΈΠ· Git-рСпозитория, вСрсионированный Ρ‡Π΅Ρ€Π΅Π· ID ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ протСстированный ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊ Π²Ρ‹ΠΊΠ°Ρ‚ΠΊΠ΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚. Π’ ΠΈΠ΄Π΅Π°Π»Π΅, это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ чистая функция (pure function): Ссли Π²Ρ‹ пСрСсобСрётС ΠΊΠΎΠΌΠΌΠΈΡ‚, созданный нСсколько мСсяцСв Π½Π°Π·Π°Π΄, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚. Однако ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ содСрТимоС node_modules Π² Git, ΠΈ получаСтся, Ρ‡Ρ‚ΠΎ послС клонирования рСпозитория Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ установку зависимостСй ΠΈΠ· рССстра npm. А, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠΆΠ΅ выяснили, этот процСсс довольно нСстабилСн ΠΈ привязан ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ экосистСмы (содСрТимому npm registry, вСрсиям npm ΠΈ Ρ‚. Π΄.). ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ npm вносит хаос Π² наш ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ CI/CD ΠΈ ΠΌΡ‹ ΡƒΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ сборку ΠΏΠΎ ID ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ всС описанныС Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ использованиС зависимостСй Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, npm (ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ соврСмСнный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€) ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π·Π°ΠΌΠΎΡ€ΠΎΠ·ΠΊΠΈ зависимостСй. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ это автоматичСски ΠΈ прямо ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ: Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ вызывая ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ npm install, npm Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ устанавливаСт всС зависимости ΠΈ создаёт Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ node_modules, ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ создаСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» package-lock.json. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» называСтся lock-Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈ содСрТит Π² сСбС ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ±ΠΎ всСх установлСнных зависимостях, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΡ… Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ вСрсии, URL npm registry, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π» скачан ΠΏΠ°ΠΊΠ΅Ρ‚, Π° Ρ‚Π°ΠΊΠΆΠ΅ SHA-Ρ…ΡΡˆ самого Π°Ρ€Ρ…ΠΈΠ²Π° с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ. Помимо ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, lock-Ρ„Π°ΠΉΠ» npm описываСт Π΅Ρ‰Π΅ ΠΈ порядок установки зависимостСй, ΠΈ ΠΈΡ… Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС.

ΠŸΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ npm install ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΡƒΠ²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ lock-Ρ„Π°ΠΉΠ» содСрТится Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΈ Π² дальнСйшСм зависимости Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ соотвСтствии с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈΠ· lock-Ρ„Π°ΠΉΠ»Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ npm install сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ Ρ€Π°Π· Π½Π° любой машинС ΠΈ Π² любоС врСмя (Π΄Π°ΠΆΠ΅ спустя мСсяцы), ΠΈ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ структуру Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ node_modules. Π’Π°ΠΊΠΆΠ΅ стоит Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ установка зависимостСй Ρ‡Π΅Ρ€Π΅Π· lock-Ρ„Π°ΠΉΠ» осущСствляСтся быстрСС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ npm Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ зависимостСй ΠΈΠ· манифСста с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, доступными Π² рССстрС npm. Π”Π°ΠΆΠ΅ Ссли вСрсия npm обновится ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ установки зависимостСй помСняСтся, lock-Ρ„Π°ΠΉΠ» всё Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ», ΠΏΠΎ сути, описываСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° основС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ смыслС эта концСпция Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСимущСства lock-Ρ„Π°ΠΉΠ»Π°, Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² систСму контроля вСрсий. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ строго привяТСтС ΠΏΠΎΠ»Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌ Π² Git. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ΅ воспроизводство сборок Π² вашСй систСмС CI/CD ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ Β«ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈΒ».

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ склонируСт Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΊ сСбС Π½Π° ΠΌΠ°ΡˆΠΈΠ½Ρƒ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй, ΠΊΠ°ΠΊ ΠΈ Ρƒ вас. Π­Ρ‚ΠΎ устранит ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈΠ· разряда «странно, Π° Ρƒ мСня всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Β» (β€œit works on my machine”).

Npm Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ lock-Ρ„Π°ΠΉΠ» ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ автоматичСски Π½Π° основС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· манифСста ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, глобального состояния npm registry ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° установки зависимостСй npm. Однако содСрТимоС Ρ„Π°ΠΉΠ»Π° Π²ΠΏΠΎΠ»Π½Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано Π΄Π°ΠΆΠ΅ Π½Π° этапС code review. Diff lock-Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ зависимости Π² Π΄Π΅Ρ€Π΅Π²Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹, ΠΊΠ°ΠΊΠΈΠ΅ Π±Ρ‹Π»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹, Π° ΠΊΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹. НавСрноС, Π½Π΅Ρ‚ смысла ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ измСнСния этого Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ, Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΉ это ΠΌΠΎΠΆΠ΅Ρ‚ сильно ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² поискС Π²ΠΈΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π²Π°ΠΌ ΠΊΡƒΡ‡Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Но Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Ρ€Π°Π±ΠΎΡ‚Π°Π» эффСктивнСС ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±Ρ‹Π» ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ, я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ зависимости ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π°Ρ‰Π΅ (Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ссли Ρƒ вас обновилось Ρ‚Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² Π΄Π΅Ρ€Π΅Π²Π΅ зависимостСй, Π° Π½Π΅ сотня).

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим содСрТимоС Ρ„Π°ΠΉΠ»Π° package-lock.json Π² тСстовом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Π³Π΄Π΅ установлСна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ β€” express.

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» содСрТит ΠΏΠΎΡ‡Ρ‚ΠΈ 400 строк, Π½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ получился достаточно Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ наглядным, я ΠΏΠΎΠΊΠ°Π·Π°Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²Π° зависимостСй.

package-lock.json

{
  "name": "test",
  "version": "1.0.0",
  "lockfileVersion": 1,
  "requires": true,
  "dependencies": {
    "express": {
      "version": "4.17.1",
      "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
      "integrity": "sha512-mHJ9O79RqluphRr…7xlEMXTnYt4g==",
      "requires": {
        "debug": "2.6.9",
        "send": "0.17.1"
      }
    },
    "debug": {
      "version": "2.6.9",
      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
      "integrity": "sha512-bC7ElrdJaJnPbAP…eAPVMNcKGsHMA==",
      "requires": {
        "ms": "2.0.0"
      }
    },
    "ms": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
    },
    "send": {
      "version": "0.17.1",
      "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
      "integrity": "sha512-BsVKsiGcQMFwT8U…cNuE3V4fT9sAg==",
      "requires": {
        "debug": "2.6.9",
        "depd": "~1.1.2",
        "destroy": "~1.0.4",
        "encodeurl": "~1.0.2",
        "escape-html": "~1.0.3",
        "etag": "~1.8.1",
        "fresh": "0.5.2",
        "http-errors": "~1.7.2",
        "mime": "1.6.0",
        "ms": "2.1.1",
        "on-finished": "~2.3.0",
        "range-parser": "~1.2.1",
        "statuses": "~1.5.0"
      },
      "dependencies": {
        "ms": {
          "version": "2.1.1",
          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
          "integrity": "sha512-tgp+dl5cGk28utY…YaD/kOWhYQvyg=="
        }
      }
    }
  }
}

Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ. НачнСм с основных ΠΊΠΎΡ€Π½Π΅Π²Ρ‹Ρ… свойств:

  • name ΠΈ version β€” Ρ‚ΡƒΡ‚ всё просто, это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ вСрсия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ· Π΅Π³ΠΎ манифСста Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания lock-Ρ„Π°ΠΉΠ»Π°.
  • lockfileVersion β€” это вСрсия Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ прСдставлСн lock-Ρ„Π°ΠΉΠ». Она Π½ΡƒΠΆΠ½Π° для Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΠΈ, Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ npm Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°ΡŽΡ‚ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ хранСния.
  • dependencies β€” ΠΏΠΎΠ»Π½ΠΎΠ΅ плоскоС Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°; ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ»ΡŽΡ‡ это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” дСскриптор.

ДСскриптор ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ взятой зависимости выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • version β€” точная вСрсия ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ установки.
  • resolved β€” URL ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² рССстрС npm, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ Π±Ρ‹Π» скачан.
  • integrity β€” SHA-Ρ…ΡΡˆ ΠΏΠ°ΠΊΠ΅Ρ‚Π°; провСрочная сумма, которая позволяСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Π»ΠΎ внСсСно ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΊ Π² процСссС скачивания, Ρ‚Π°ΠΊ ΠΈ Π½Π° сторонС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° (Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ). Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ элСмСнт бСзопасности ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с npm, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ Π½Π΅ смоТСт ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π²ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ΄ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. ΠŸΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ нСсоотвСтствия Π²Ρ‹Π·ΠΎΠ² npm install Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Π½ с ошибкой.
  • requires β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ зависимости (копируСтся ΠΈΠ· поля dependencies манифСста стороннСго ΠΏΠ°ΠΊΠ΅Ρ‚Π°). ΠšΠ»ΡŽΡ‡ являСтся Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ вСрсий semver.
  • dependencies β€” Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ полю dependencies, описанному Π²Ρ‹ΡˆΠ΅. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ рСкурсивно ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ структуру Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΠ³Π΄Π° Π² Π΄Π΅Ρ€Π΅Π²Π΅ зависимостСй содСрТится ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий.
  • dev β€” Ссли true, Ρ‚ΠΎ эта Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ являСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ установки зависимостСй).

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ express (наша прямая Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ) зависит ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° debug, Π° Ρ‚ΠΎΡ‚, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΡ‚ [email protected]. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, ΠΏΠ°ΠΊΠ΅Ρ‚ send Ρ‚Π°ΠΊΠΆΠ΅ зависит ΠΎΡ‚ ms, Π½ΠΎ ΡƒΠΆΠ΅ вСрсии 2.1.1. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ node_modules ΠΏΠ°ΠΊΠ΅Ρ‚ ms Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн Π΄Π²Π° Ρ€Π°Π·Π° (Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий), Π½ΠΎ, Π² силу ΡΠ»ΠΎΠΆΠΈΠ²ΡˆΠΈΡ…ΡΡ ΠΏΡ€Π°Π²ΠΈΠ» Π² Node.js, Π΄Π²Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ установлСны Π² ΠΊΠΎΡ€Π½Π΅. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΎΠ΄Π½Π° вСрсия устанавливаСтся Π² ΠΊΠΎΡ€Π΅Π½ΡŒ ([email protected]), Π° вторая β€” Π² ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π° send ([email protected]). Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΎ Π² lock-Ρ„Π°ΠΉΠ»Π΅. Π’ Ρ‚ΠΎΠΌ числС благодаря этому достигаСтся ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ node_modules.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ зависимостСй ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ….

Π₯отя структура lock-Ρ„Π°ΠΉΠ»Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ читаСтся ΠΈ довольно понятна, нСльзя Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот Ρ„Π°ΠΉΠ» гСнСрируСтся автоматичСски. НС ΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΊΠΈ, ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ. ПослС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ обновлСния lock-Ρ„Π°ΠΉΠ»Π° ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ потСряны.

Если нСсколько Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² трудятся Π² ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ lock-Ρ„Π°ΠΉΠ»Ρ‹, Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ merge-ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π² Git. Π’ этом случаС достаточно просто ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅ манифСста (Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ), Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ npm install: ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² автоматичСски исправит ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π² lock-Ρ„Π°ΠΉΠ»Π΅.

Если Π²Π°ΠΌ Π½Π΅ хочСтся ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π² lock-Ρ„Π°ΠΉΠ»Π°Ρ… Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ merge-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ для Git, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с npm. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅ package-lock.json автоматичСски. Однако, Ссли ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π² манифСстС, Ρ‚ΠΎ Π²Π°ΠΌ всё Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ npm install.

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ merge-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ для npm ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

npx npm-merge-driver install -g

ΠŸΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ Git Π² консоли Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ:

npm WARN conflict A git conflict was detected in package-lock.json.
Attempting to auto-resolve. Auto-merging package-lock.json

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с lock-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π½Π΅ трСбуСтся ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ особых дСйствий со стороны Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, npm автоматичСски обновляСт lock-Ρ„Π°ΠΉΠ», ΠΊΠΎΠ³Π΄Π° Π² этом Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ. НапримСр, Ссли Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ npm install lodash, Ρ‚ΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ npm Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π½ΠΎΠ²ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π² манифСст ΠΈ установит Π΅Ρ‘, ΠΎΠ½ автоматичСски ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ lock-Ρ„Π°ΠΉΠ». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, npm всСгда слСдит, Ρ‡Ρ‚ΠΎΠ±Ρ‹ lock-Ρ„Π°ΠΉΠ» Π±Ρ‹Π» Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии.

Однако Ссли Π²Ρ‹ вноситС измСнСния Π² манифСст ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, добавляя Π½ΠΎΠ²ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Β«Π΄Ρ€ΠΈΡ„Ρ‚Β» (рассинхронизация) ΠΌΠ΅ΠΆΠ΄Ρƒ манифСстом ΠΈ lock-Ρ„Π°ΠΉΠ»ΠΎΠΌ. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² достаточно ΡƒΠΌΡ‘Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ этот Π΄Ρ€ΠΈΡ„Ρ‚: ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ npm install, npm ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ lock-Ρ„Π°ΠΉΠ»Π°, ΠΈ Ссли ΠΎΠ½ устарСл, Ρ‚ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² автоматичСски ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ lock-Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· манифСста.

Как я сказал Π²Ρ‹ΡˆΠ΅, Ссли npm ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ отставаниС lock-Ρ„Π°ΠΉΠ»Π° ΠΎΡ‚ манифСста, Ρ‚ΠΎ это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ обновлСнию lock-Ρ„Π°ΠΉΠ»Π° ΠΈ установкС зависимостСй ΠΈΠ· манифСста. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎ, ΠΈ Π΄Π°ΠΆΠ΅ опасно Π² контСкстС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° CI/CD, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ ΠΈΠ·-Π·Π° ΡΠ»Π΅Ρ‚Π΅Π²ΡˆΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ зависимостСй.

Π§Ρ‚ΠΎΠ±Ρ‹ этого Π½Π΅ происходило, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ npm Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ npm ci. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ npm install, эта ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ обновляСт lock-Ρ„Π°ΠΉΠ». Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ отсутствуСт ΠΈΠ»ΠΈ устарСл lock-Ρ„Π°ΠΉΠ», Ρ‚ΠΎ npm ci Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΊΠΎΠ΄ ошибки ΠΈ ΠΏΡ€Π΅Ρ€Π²Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°, гарантируя, Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ Π½Π΅ случится (ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Fail-fast). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, npm ci ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ удаляСт Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ node_modules ΠΏΠ΅Ρ€Π΅Π΄ установкой зависимостСй, Ρ‡Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ установку Π½Π° чистый лист.

По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ npm install Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° CI/CD, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ npm ci вмСсто Π½Π΅Π΅. Π˜Π΄ΠΈΡ‚Π΅ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ это прямо сСйчас! (я ΠΏΠΎΠ΄ΠΎΠΆΠ΄Ρƒ).

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ особСнности использования lock-Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². ΠŸΠ΅Ρ€Π²ΠΎΠ΅, ΠΎ Ρ‡Ρ‘ΠΌ стоит ΡΠΊΠ°Π·Π°Ρ‚ΡŒ: Ρ„Π°ΠΉΠ» package-lock.json Π½Π΅ публикуСтся Π² npm registry. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚Π΅ свой ΠΏΠ°ΠΊΠ΅Ρ‚ Π² рССстр npm (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°), Ρ‚ΠΎ содСрТимоС вашСго lock-Ρ„Π°ΠΉΠ»Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ влияния Π½Π° Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй ΠΏΡ€ΠΈ установкС вашСго ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² Ρ‡Π΅ΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π’ этом случаС ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ содСрТимоС вашСго манифСста. Π­Ρ‚ΠΎ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ: Ссли Π±Ρ‹ каТдая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π»Π° свои зависимости, Ρ‚ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π΅Ρ‰Ρ‘ большС (ΠΊΡƒΠ΄Π° ΡƒΠΆ большС?) ΠΈ содСрТало ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π΄ΡƒΠ±Π»Π΅ΠΉ. АдСкватно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ зависимостями стало Π±Ρ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Однако Π² npm Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° npm shrinkwrap. Она создаСт Ρ„Π°ΠΉΠ» npm-shrinkwrap.json Π² ΠΊΠΎΡ€Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ lock-Ρ„Π°ΠΉΠ»ΠΎΠΌ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ сСмантикой. ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ package-lock.json, ΠΎΠ½ Ρ‚Π°ΠΊΠΈ публикуСтся Π² рССстр npm ΠΈ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ нСпосрСдствСнноС влияниС Π½Π° Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй ΠΏΡ€ΠΈ установкС вашСго ΠΏΠ°ΠΊΠ΅Ρ‚Π°. ЀактичСски, ΠΎΠ½ Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй вашСго ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π΄Π°ΠΆΠ΅ Ссли Ρ‚ΠΎΡ‚ устанавливаСтся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Как я сказал Π²Ρ‹ΡˆΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΎΡ‡Π΅Π½ΡŒ Π²Ρ€Π΅Π΄Π½ΠΎ, поэтому Π½Π΅ стоит этого Π΄Π΅Π»Π°Ρ‚ΡŒ. Однако, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Node.js, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°Π½Π°Π»ΠΎΠ³ webpack, gulp, create-react-app ΠΈ Ρ‚. Π΄.). Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° устанавливаСтся прСимущСствСнно глобально Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (npm i -g), Ρ‚ΠΎ использованиС shrinkwrap-Ρ„Π°ΠΉΠ»Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π° машинС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ зависимости, Ρ‡Ρ‚ΠΎ ΠΈ Π½Π° вашСй машинС. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ явныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΎΠΏΠ°ΡΠ°Ρ‚ΡŒΡΡ Π΄Ρ€ΠΈΡ„Ρ‚Π° зависимостСй Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ npm shrinkwrap. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях я Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

ΠšΡΡ‚Π°Ρ‚ΠΈ, Ρ„Π°ΠΉΠ» npm-shrinkwrap.json ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ Ρ„Π°ΠΉΠ»ΠΎΠΌ package-lock.json. Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ достаточно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

Π’Π°ΠΆΠ½Ρ‹ΠΌ этапом Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ являСтся Π΅Π³ΠΎ тСстированиС. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ внСшниС условия, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ваша Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ зафиксируСтС прямыС зависимости, Π²Ρ‹ Π½Π΅ смоТСтС Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ (Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ shrinkwrap, Π½ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ выяснили, Ρ‡Ρ‚ΠΎ это плохая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°).

По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ срСду, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ со свСТими вСрсиями всСх зависимостСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π² Π½ΠΎΠ²Ρ‹Ρ… ΠΈ свСТих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ сломаСтся. Однако, Ссли Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ lock-Ρ„Π°ΠΉΠ» Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ постоянно ΠΎΡ‚Ρ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ вСрсии Π²Π°ΡˆΠΈΡ… зависимостСй Π½Π°Π·Π°Π΄, Π½Π΅ давая Π²Π°ΠΌ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с самыми свСТими вСрсиями всСх зависимостСй (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ навСрняка Π±ΡƒΠ΄ΡƒΡ‚ Ρƒ Π²Π°ΡˆΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ). Π›ΠΈΠ±ΠΎ Π²Π°ΠΌ придСтся постоянно Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ npm update ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ тСстом.

Π ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΡƒΡΡΡŒ этим, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ совСтуСт Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ lock-Ρ„Π°ΠΉΠ»Ρ‹ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Однако, я ΡΡ‡ΠΈΡ‚Π°ΡŽ это слишком Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ совСтом. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²Ρ‹Ρ… runtime-зависимостСй вашСго ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΅Ρ‰Π΅ ΠΈ dev-зависимости. Если Π²Ρ‹ ΠΎΡ‚ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ΡΡŒ ΠΎΡ‚ lock-Ρ„Π°ΠΉΠ»Π°, Ρ‚ΠΎ ваши dev-зависимости Π²Ρ‹ΠΉΠ΄ΡƒΡ‚ ΠΈΠ·-ΠΏΠΎΠ΄ контроля, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ потСряСтС Π½Π΅ΠΊΠΈΠΉ островок ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π‘ΠΎΠ»Π΅Π΅ подходящим Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, Π½Π° ΠΌΠΎΠΉ взгляд, Π±Ρ‹Π»Π° Π±Ρ‹ рСорганизация ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° CI/CD Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ тСстировался Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π±Π΅Π· использования lock-Ρ„Π°ΠΉΠ»Π°, ΠΏΡƒΡ‚Π΅ΠΌ установки самых свСТих доступных зависимостСй. Π‘ΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ (Ссли трСбуСтся) ΠΌΠΎΠΆΠ½ΠΎ ΠΈ с участиСм lock-Ρ„Π°ΠΉΠ»Π° (для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… этапа Π² вашСм CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π΅).

Π£ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² lock-Ρ„Π°ΠΉΠ»Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ чувство раздраТСния, Π²ΠΈΠ΄ΠΈΠΌΠΎ, ΠΈΠ·-Π·Π° нСпонимания ΠΈΡ… прСдназначСния ΠΈΠ»ΠΈ особСнностСй ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π’Π°ΠΊΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ норовят Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ package-lock.json Π² .gitignore ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ npm, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ lock-Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΡ€ΠΈ этом ΠΎΠ½ΠΈ (часто сами Ρ‚ΠΎΠ³ΠΎ Π½Π΅ понимая) ΠΆΠ΅Ρ€Ρ‚Π²ΡƒΡŽΡ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ своСго прилоТСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π΅Ρ€ΡΡŽΡ‚ достаточно ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт отслСТивания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ зависимостСй Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Часто эти ΠΆΠ΅ люди Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ строго ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ вСрсии зависимостСй Π² основном манифСстС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½Π΅ отдавая сСбС ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ создаСт иллюзию Π΅Ρ‘ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π― ΡƒΠΆΠ΅ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΡŽ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ инструмСнт Π½Π΅ ΠΏΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, тСряя Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, которая обСспСчиваСтся, Π² Ρ‚ΠΎΠΌ числС, ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ сСмантичСского вСрсионирования.

НадСюсь, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Π»ΡƒΡ‡ΡˆΠ΅ понимая, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ эти ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹, Π²Ρ‹ смоТСтС эффСктивнСС Π½Π°Π»Π°Π΄ΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ.

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Π·Π°Π΄Π°Ρ‡Π° lock-Ρ„Π°ΠΉΠ»ΠΎΠ² Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π΅ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ навсСгда Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС зависимости ΠΈ большС Π½ΠΈΠΊΠΎΠ³Π΄Π° ΠΈΡ… Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ, Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈΡ… установки ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΈΡ… обновлСния.

Π—Π°Π»ΠΎΠ³ высокого качСства, поддСрТиваСмости ΠΈ удобства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² частом ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ зависимостСй. Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ зависимости малСнькими порциями ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΈΡ… Π²Ρ‹Ρ…ΠΎΠ΄Π°. Diff lock-Ρ„Π°ΠΉΠ»Π° всСгда ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ обновилось. Если ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ нСбольшим, Ρ‚ΠΎ Π²Ρ‹ Π»Π΅Π³ΠΊΠΎ смоТСтС Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Если ΠΆΠ΅ послС обновлСния Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‚ΠΎ, скорСС всСго, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄Π½Π°, ΠΈ Π΅Ρ‘ Π±ΡƒΠ΄Π΅Ρ‚ нСслоТно ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»Π³ΠΎΠ΄Π° ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ зависимости, Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ слоТно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ слоТно Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° малСнькиС части. Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ Π²ΠΎΡ€ΠΎΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ€Π°Π·Π½ΠΎΠΉ стСпСни тяТСсти, Π° Π² случаС возникновСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ (Π° ΠΎΠ½Π°, скорСС всСго, ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ Π½Π΅ ΠΎΠ΄Π½Π°) Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ мСсто Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ слоТнСС (diff здСсь ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ бСсполСзСн Π² силу Π΅Π³ΠΎ гигантского Ρ€Π°Π·ΠΌΠ΅Ρ€Π°).

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ запускайтС ваши зависимости, ΠΎΠ±Π½ΠΎΠ²Π»ΡΠΉΡ‚Π΅ΡΡŒ рСгулярно, Π²ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ это Π² ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΡƒ, Ρ‚ΠΎΠ³Π΄Π° ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΆΠ΅ Π½Π° Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ°ΠΆΠΎΡ€Π½Ρ‹Π΅ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»Π°Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ: Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΌΠ°ΠΆΠΎΡ€Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‡Π΅ΠΌ Π½Π° нСсколько сразу.

ΠœΡ‹ рассмотрСли ΡΡ‚ΠΎΠ»ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ инструмСнт ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ надСТности ΠΈ бСзопасности управлСния зависимостями, ΠΊΠ°ΠΊ lock-Ρ„Π°ΠΉΠ»Ρ‹ npm. ИспользованиС этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ сущСствСнно ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ качСство ΠΈ удобство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ постС я Π΅Ρ‰Π΅ дальшС ΡƒΠ³Π»ΡƒΠ±Π»ΡŽΡΡŒ Π² вопросы бСзопасности npm.

Если Π²Π°ΠΌ понравился ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», Ρ‚ΠΎ, поТалуйста, ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π»Π°ΠΉΠΊΠΈ, ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° наш Π±Π»ΠΎΠ³ ΠΈ Π΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ ссылками с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ. Π’Π°ΠΊ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ наша Ρ€Π°Π±ΠΎΡ‚Π° вострСбована, ΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π΄ΠΎΠ²Π°Ρ‚ΡŒ вас Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°ΠΌΠΈ.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ вопросы ΠΈΠ»ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅, Ρ‚ΠΎ Π½Π΅ Π±ΠΎΠΉΡ‚Π΅ΡΡŒ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, я с Ρ€Π°Π΄ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈΠΌΡƒ участиС Π² обсуТдСнии ΠΈ ΡƒΡ‡Ρ‚Ρƒ ваши поТСлания Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… постах.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ `package-lock.json` для быстрого Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ²

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π΅, созданной, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, я сталкивался с ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌΠΈ слияния Π² package-lock.json , ΠΈ ΠΌΠΎΠ΅ быстроС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ всСгда состояло Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ npm install . Π― Π²ΡΠ΅Ρ€ΡŒΠ΅Π· Π½Π΅ задумывался ΠΎ послСдствиях этого исправлСния, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΎΠ½ΠΎ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ npm воссоздал Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π° Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π» ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ?

javascript

node.js

npm

package-lock.json

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ


John Mutuma Β  Β 

10 января 2019 Π² 07:50

3 ΠΎΡ‚Π²Π΅Ρ‚Π°




84

Π”Π°, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ повлияСт Π½Π° вСсь ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ.

  1. Ссли ваша ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ запускаСт npm install послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ git pull , Π²Ρ‹ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии зависимостСй. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½ заканчиваСтся Π½Π° «but it works for me!!» ΠΈ «Π― Π½Π΅ понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠΎΠΉ ΠΊΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для вас»

  2. Π΄Π°ΠΆΠ΅ Ссли вся ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ npm install , это всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС Π² порядкС. Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ дСйствуСт ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π² Ρ‚ΠΎΠΉ части, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π½Π΅ мСняли Π³ΠΎΠ΄Π°ΠΌΠΈ. ΠΈ послС (вСроятно, довольно Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎΠΉ) ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ это связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ 3-Π³ΠΎ уровня обновилась для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ основной вСрсии, ΠΈ это ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ критичСским измСнСниям.

Π’Ρ‹Π²ΠΎΠ΄: Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ удаляйтС package-lock.json . Π² вашСм случаС Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ 1

  1. ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚Π΅ измСнСния Π² package-lock.json
  2. stash ваши измСнСния
  3. pull самая послСдняя вСрсия ΠΊΠΎΠ΄Π°
  4. запуститС npm install для всСх зависимостСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ
  5. ΠΎΡ‚ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ свои измСнСния.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ 2

  1. Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ слияниС
  2. для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ «their changes only» ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ Π½Π° package-lock.json
  3. запуститС npm install , Ρ‡Ρ‚ΠΎΠ±Ρ‹ зависимости, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² package-lock.json
  4. Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚Π΅ фиксациСй фиксации(ΠΊΠΎΠΌΠΌΠΈΡ‚Π°) слияния.

PS Π΄Π°, для зависимостСй ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня, Ссли ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΈΡ… Π±Π΅Π· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "react": "16.12.0"), ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ вСрсии ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС npm install . Но ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΎ зависимостях Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ 2+ уровня (зависимостях, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ наши зависимости), поэтому package-lock.json Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π°ΠΆΠ΅Π½ для ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


skyboyer Β  Β 

10 января 2019 Π² 11:03



38

Π”Π°, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ»ΠΎΡ…ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ часто, Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ package.1.0.0″ , Π° Ρ€Π°Π½ΡŒΡˆΠ΅ Ρƒ вас Π±Ρ‹Π»ΠΎ "moduleX": "1.0.0" Π² package-lock.json .

Π£Π΄Π°Π»ΠΈΠ² package-lock.json ΠΈ запустив npm install , Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π΄ΠΎ вСрсии 1.0.999 ΠΈΠ· moduleX, Π½Π΅ зная ΠΎΠ± этом, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ½ΠΈ создали ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈΠ»ΠΈ сдСлали ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ (Π½Π΅ слСдуя сСмантичСскому ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ вСрсиями).

Π’ΠΎ всяком случаС, для этого ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ стандартноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

  1. Π˜ΡΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ package.json
  2. Запуск: npm install --package-lock-only

https://docs.npmjs.com/настройка-npm/ΠΏΠ°ΠΊΠ΅Ρ‚-locks.html#resolving-lockfile-ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


OZZIE Β  Β 

05 июня 2020 в 07:35



10

Π― знаю, Ρ‡Ρ‚ΠΎ это старый вопрос, Π½ΠΎ для Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… искатСлСй Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ npm-merge-driver, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ автоматичСски Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ слияния связанных Ρ„Π°ΠΉΠ»ΠΎΠ² npm.

ΠŸΡ€ΠΎΡΡ‚ΠΎ установитС Π΅Π³ΠΎ глобально npx npm-merge-driver install --global . ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь npm-merge-driver

Edit: ΠŸΡ€ΠΎΡΡ‚ΠΎ Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ заинтСрСсованы Π² использовании Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ вСсти сСбя бСспорядочно ΠΈ Π΅Π³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, хотя это ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ инструмСнт, Π½Π°Π΄ Π½ΠΈΠΌ всС Π΅Ρ‰Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


Taha Β  Β 

25 сСнтября 2019 Π² 12:19


  • Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» package-lock.json Π² Ρ„Π°ΠΉΠ» .gitignore?

    Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСрсии зависимостСй, установлСнных Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊΠΎΠΌΠ°Π½Π΄Π° npm install создаСт Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ package-lock.json . Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ сдСлано с Node.js v8.0.0 ΠΈ npm v5.0.0 , ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· вас, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π½Π°ΡŽΡ‚. НСсмотря Π½Π° Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ Node.js ΠΈ npm ΠΎ фиксации(ΠΊΠΎΠΌΠΌΠΈΡ‚Π°) этого Ρ„Π°ΠΉΠ»Π°,…

  • Никакого эффСкта ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ git diff — ‘:(exclude)package-lock.json’

    Π― Ρ…ΠΎΡ‡Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ diff, Π½ΠΎ Π±Π΅Π· ΠΏΠ°ΠΊΠ΅Ρ‚Π°-lock.json, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½ ΠΈ являСтся сгСнСрированным Ρ„Π°ΠΉΠ»ΠΎΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ интСрСсного для мСня Ρ‚Π°ΠΌ Π½Π΅Ρ‚. Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΎΠ±Π° : git diff — ‘:(exclude)package-lock.json’ git diff — ‘:!package-lock.json’ Π½ΠΎ Ρƒ Π½Π΅Π³ΠΎ просто Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π²Ρ‹Ρ…ΠΎΠ΄. Π§Ρ‚ΠΎ я дСлаю Π½Π΅ Ρ‚Π°ΠΊ? Π― Π±Π΅Π³Ρƒ git…


ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ вопросы:

БтратСгия Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² DynamoDB

Какова стратСгия Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² для DynamoDB ? Π’ Π‘Π΅Π»ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΏΠΎ Π”ΠΈΠ½Π°ΠΌΠΎ говорится ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… вСрсий ΠΊ GetItem, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ. Π­Ρ‚ΠΎΡ‚ вопрос SO Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ,…

Какой смысл ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ «ΠΏΠ°ΠΊΠ΅Ρ‚-lock.json» npm ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ вСрсий?

Какой смысл ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ npm package-lock.json ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ вСрсий? По ΠΌΠΎΠ΅ΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ этого Ρ„Π°ΠΉΠ»Π° с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ исходного ΠΊΠΎΠ΄Π° Π²Ρ‹Π·Π²Π°Π»ΠΎ большС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹, Ρ‡Π΅ΠΌ прирост эффСктивности. НаличиС…

npm install with —no-package-lock flag-ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚-lock.json?

Из npm 5 doc : АргумСнт —no-package-lock Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ npm ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» package-lock.json. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π»ΠΈ npm install с —no-package-lock Π·Π° package-lock.json (Ссли ΡƒΠΆΠ΅ сущСствуСт) Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ…

Как Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ сгСнСрирован Ρ„Π°ΠΉΠ» package-lock.json для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Node.js docker?

Π£Ρ‡Π΅Π±Π½ΠΈΠΊ Node.js docker ( https://nodejs.org/en/docs/guides/nodejs-docker-webapp/ ) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ установка npm Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° Π½Π° хостС Π΄ΠΎ запуска docker для создания Ρ„Π°ΠΉΠ»Π° package-lock.json….

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ package.json, package-lock.json ΠΈ yarn.lock?

Π― понял Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ ссылки, Π½ΠΎ всС ΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ»-это вопрос ? https://docs.npmjs.com/files/package-lock.json

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» package-lock.json Π² Ρ„Π°ΠΉΠ» .gitignore?

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСрсии зависимостСй, установлСнных Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊΠΎΠΌΠ°Π½Π΄Π° npm install создаСт Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ package-lock.json . Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ сдСлано с Node.js v8.0.0 ΠΈ npm v5.0.0 , ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·…

Никакого эффСкта ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ git diff — ‘:(exclude)package-lock.json’

Π― Ρ…ΠΎΡ‡Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ diff, Π½ΠΎ Π±Π΅Π· ΠΏΠ°ΠΊΠ΅Ρ‚Π°-lock.json, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½ ΠΈ являСтся сгСнСрированным Ρ„Π°ΠΉΠ»ΠΎΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ интСрСсного для мСня Ρ‚Π°ΠΌ Π½Π΅Ρ‚. Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΎΠ±Π° : git diff —…

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ mergetool XCode для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ²?

Π― Π½Π°Ρ…ΠΎΠΆΡƒΡΡŒ Π² сСрСдинС пСрСбазирования, ΠΈ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ merge. Когда я ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽ Ρ„Π°ΠΉΠ» Π² XCode, я Π²ΠΈΠΆΡƒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² управлСния вСрсиями (<<<<<<< ΠΈ…

ΠŸΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² ΠΎΠ±ΠΎΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ… package.json, package-lock.json Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ angular

Π― Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² angular. Когда я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΎΠ±Ρ€Π°Π·Π΅Ρ† прилоТСния angular, установлСнного с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ angular-cli, я ΡƒΠ²ΠΈΠ΄Π΅Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ package.json ΠΈ package-lock.json. Π‘Ρ€Π΅Π΄ΠΈ этих Ρ„Π°ΠΉΠ»ΠΎΠ²…

ΠŸΠ΅Ρ€Π΅ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° package-lock.json

Рассмотрим Ρ‚Π°ΠΊΠΎΠΉ сцСнарий: Π― установил Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ jquery ΠΈ bootstrap с npm install . ПослС этого npp создаСт Ρ„Π°ΠΉΠ» package-lock.json , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± установлСнном…

package-lock.json β€” Русский β€” it-swarm.com.ru

package-lock.json β€” Русский β€” it-swarm.com.ru

it-swarm.com.ru

НуТны Π»ΠΈ ΠΌΠ½Π΅ ΠΊΠ°ΠΊ package-lock.json, Ρ‚Π°ΠΊ ΠΈ package.json?

Какой смысл ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ npm «package-lock.json» ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ вСрсий?

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ package.json ΠΈΠ· package-lock.json

Ошибка ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ уязвимости Github для модуля ΡƒΠ·Π»Π° hoek

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ уязвимый ΠΏΠ°ΠΊΠ΅Ρ‚ npm Π² ΠΌΠΎΠ΅ΠΌ package-lock.json, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ Π² package.json?

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ npm-shrinkwrap.json ΠΈ package-lock.json?

npm5 эквивалСнтно Ρ„Π»Π°Π³Ρƒ —pure-lockfile для пряТи?

ΠŸΠΎΡ‡Π΅ΠΌΡƒ «npm install» пСрСписываСт package-lock.json?

npm install Π½Π΅ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚-lock.json

Π•ΡΡ‚ΡŒ Π»ΠΈ способ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ npm ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ package-lock.json?

ΠŸΠΎΡ‡Π΅ΠΌΡƒ package-lock.json ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Ρ…ΡΡˆ цСлостности с sha1 Π½Π° sha512?

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ бСзопасности Π² зависимости, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² package-lock.json

Ошибка: Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области (‘angular.json’) Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½

Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Caret ΠΈ package-lock.json: ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с Π½ΠΈΠΌΠΈ послСдниС вСрсии Π±Π΅Π· Π²Π·Π»ΠΎΠΌΠ°?

Package-lock.json — Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ зависимости ΠΎΡ‚

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ свойство цСлостности Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Π° yarn.lock?

Как npm ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ, Π½ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°

Π‘ΡƒΡ„Π΅Ρ€ Π±Π΅Π· ΠΊΡ€ΡƒΠ³ΠΎΠ²ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

Π‘Π»ΡƒΠΆΠ±Π° распрСдСлСнной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚Π° подсвСтки синтаксиса Emacs

Π•ΡΡ‚ΡŒ Π»ΠΈ готовая ΠΊ производству ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ Ρ…ΡΡˆ-рСализация Π² C++?

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ — для настоящих экспСртов

ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ «ΠŸΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΎ врСмя оТидания Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ; ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ», Π΄Π°ΠΆΠ΅ Ссли я Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ

ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ экран Π½Π° Android

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Gemfile ΠΈ Gemfile.lock Π² Ruby Π½Π° Rails

ПониманиС Ρ„Π°ΠΉΠ»Π° Gemfile.lock

Как ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ iPhone/iPad, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ находится Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π°?

НС блокируСмая мноТСствСнная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ / ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² C ++ 11

Gemfile.lock содСрТит ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ слияния

ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡƒΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊΠ° Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду Π² Android 5.1

Atomic shared_ptr для ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ списка Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Android-устройство всСгда Π±Ρ‹Π»ΠΎ Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅?

Ѐункция Samsung «ΠžΠΏΡ‚имизация ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ» ΡƒΠ±ΠΈΠ²Π°Π΅Ρ‚ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Π΅ прилоТСния Ρ‡Π΅Ρ€Π΅Π· 3 дня

Π’Π°Ρˆ ΠΏΠ°ΠΊΠ΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ для rake (12.0.0), Π½ΠΎ эта вСрсия Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π° Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· источников, пСрСчислСнных Π² вашСм Gemfile.

ИспользованиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Boost.Lockfree ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ использованиС ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ²

Π“Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ прогрСсса Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ

Как ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² ΠΎΠ±ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚Π΅Π»Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Eclipse

Π§Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚: ошибка [INSTALL_FAILED_CONTAINER_ERROR]?

НС Π²ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ зависимости ΠΈΠ· Ρ„Π°ΠΉΠ»Π° packages.config ΠΏΡ€ΠΈ создании ΠΏΠ°ΠΊΠ΅Ρ‚Π° NuGet

ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π΅Ρ‰Π΅ Ρ€Π°Π·

[A] System.Web.WebPages.Razor.Configuration.HostSection Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊ … web.config ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

Как ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ go get?

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ восстановлСниС ΠΏΠ°ΠΊΠ΅Ρ‚Π° NuGet Π² Visual Studio 2013

NuGet Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚

Π“Π΄Π΅ sdkman устанавливаСт ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹?

НСсанкционированный ΠΏΠ°ΠΊΠ΅Ρ‚ nuget ΠΈΠ· Visual Studio Team Services с использованиСм ядра asp.) Π² package.json?

npm устанавливаСт частныС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ github ΠΏΠΎ зависимости Π² package.json

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ настройки запуска WebStorm ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° «scripts» package.json

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ частноС Github Ρ€Π΅ΠΏΠΎ Π² качСствС зависимости ΠΎΡ‚ npm

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для скриптов npm

ΠšΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² package.json

Π—Π°ΡΡ‚Π°Π²ΡŒΡ‚Π΅ `npm install —save` Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π² package.json

NPM: ΠΊΠ°ΠΊ просто Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡΡ‚ΠΈΠ½ΡΡ‚Π°Π»Π»ΡΡ†ΠΈΡŽ?

Ошибка запуска скрипта ΠΏΡ€ΠΈ запускС npm start

Ρ‡Ρ‚ΠΎ я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² ΠΏΠΎΠ»Π΅ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ ΠΌΠΎΠ΅Π³ΠΎ package.json, Ссли ΠΌΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ?

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Node.js Π±Π΅Π· package.json

«Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²» Π² Nodejs5 ΠΈ babel?

Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎ установлСнный Π³Π»ΠΎΡ‚ΠΎΠΊ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС?

Как ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ прилоТСния Π² Angular?

Как Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ package.json для запуска сцСнария eslint

Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ скрипт Π² Ρ„Π°ΠΉΠ» package.json, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСт Ρ„Π°ΠΉΠ» javascript?

НС удаСтся Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ «ΠΏΡƒΡ‚ΡŒ» Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ

Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ «devDependencies», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ npm

NPM, package.json — ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ с «@» Π² ΠΈΠΌΠ΅Π½ΠΈ

Как ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ `package.json` ΠΊ npm?

Ошибка зависимости ΠΎΡ‚ ΡƒΠ·Π»Π°

Π‘Π±ΠΎΡ€ΠΊΠ° .exe Ρ„Π°ΠΉΠ»Π° Π² .NET Core RC2

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сцСнарии package.json для копирования Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ

npm package.json основная ΠΈ структура ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

npm update Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚

Как Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ свойства ‘files’ ΠΈ ‘directoryies’ Π² package.json?

ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ установка пряТи вмСсто npm для модуля Node?

Как ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ `yarn.lock` с` package.json`?

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»Π΅ «module» package.json?

ПолС ‘browser’ Π½Π΅ содСрТит допустимой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ псСвдонима

НС удаСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ NuGet, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбуСтся Newtonsoft.Json.10.0.1, Π² Visual Studio 2015

Π—Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ bitbucket Π² package.json с вСрсиСй

ΠŸΠΎΡ‡Π΅ΠΌΡƒ (ΠΈ ΠΊΠ°ΠΊ я ΠΌΠΎΠ³Ρƒ FIx) ESLint import / no-extranous-dependencies Π‘Π±ΠΎΠΈ Π² установлСнных ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…?

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Node ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² ΠΏΠ°ΠΏΠΊΡƒ .staging?

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСстовая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡ€ΠΈ создании package.json?

Как ΠΌΠ½Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π»ΠΈ @ types / * Π² «зависимости» ΠΈΠ»ΠΈ Β«devDependenciesΒ»?

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π»ΠΈΡ‡Π½Ρ‹ΠΉ рССстр Π² package.json

Ошибка: EPERM: опСрация Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π°, отсоСдинитС ‘D: \ Sources \ ** \ node_modules \ fsevents \ node_modules \ abbrev \ package.json’

Β«Uncaught TypeError: React.createClass Π½Π΅ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉΒ» Π² Ρ„Π°ΠΉΠ»Π΅ Render.js (элСктронноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅)

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠ· devDependencies Π² зависимости Π² npm package.json

Как я ΠΌΠΎΠ³Ρƒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нСсколько скриптов npm ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ?

Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Angular 5 + Nodejs Express App для Heroku

Как я ΠΌΠΎΠ³Ρƒ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² скриптС npm?

Angular5: polyfills.ts & \ main.ts отсутствуСт Π² компиляции TypeScript

Π§Ρ‚ΠΎ Webpack 4 ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° с ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами: false

НС удаСтся Π½Π°ΠΉΡ‚ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Β«@ angular-devkit / build-angularΒ»

ЗапуститС ng build —prod с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ настройками срСды

Content dated before 2011-04-08 (UTC) is licensed under CC BY-SA 2.5. Content dated from 2011-04-08 up to but not including 2018-05-02 (UTC) is licensed under CC BY-SA 3.0. Content dated on or after 2018-05-02 (UTC) is licensed under CC BY-SA 4.0. | Privacy

npm — package-lock.json — Description package-lock.json автоматичСски гСнСрируСтся для Π»ΡŽΠ±Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π³Π΄Π΅



Description

package-lock.json автоматичСски гСнСрируСтся для Π»ΡŽΠ±Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π³Π΄Π΅ npm измСняСт Π»ΠΈΠ±ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ node_modules , Π»ΠΈΠ±ΠΎ package.json . Он описываСт Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ сгСнСрировано, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ установки ΠΌΠΎΠ³ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ, нСзависимо ΠΎΡ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ зависимостСй.

Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для фиксации Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ исходных тСкстов ΠΈ слуТит для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ:

  • ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ Π΅Π΄ΠΈΠ½ΠΎΠ΅ прСдставлСниС Π΄Π΅Ρ€Π΅Π²Π° зависимостСй Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ,Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰ΠΈ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅,Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈ нСпрСрывная интСграция Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ установку Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΡ… ΠΆΠ΅ зависимостСй.

  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Β«ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈΒ» ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ состояниям node_modules Π±Π΅Π· нСобходимости фиксации самого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

  • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ наглядности ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π΄Π΅Ρ€Π΅Π²Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ исходных тСкстов.

  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ процСсс установки,позволяя npm ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… для Ρ€Π°Π½Π΅Π΅ установлСнных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

  • Начиная с npm v7, Ρ„Π°ΠΉΠ»Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ содСрТат достаточно ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ прСдставлСниС ΠΎ Π΄Π΅Ρ€Π΅Π²Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ чтСния Ρ„Π°ΠΉΠ»ΠΎΠ² package.json ΠΈ позволяя Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

package-lock.json ΠΏΡ€ΠΎΡ‚ΠΈΠ² npm-shrinkwrap.json

Оба этих Ρ„Π°ΠΉΠ»Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ схоТиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΊΠΎΡ€Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ package-lock.json Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ нСльзя ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½, Ссли Π½Π°ΠΉΠ΄Π΅Π½ Π² любом мСстС, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Напротив, npm-shrinkwrap.json допускаСт ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ опрСдСляСт Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй с ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ. Π­Ρ‚ΠΎ Π½Π΅ рСкомСндуСтся, ΠΊΡ€ΠΎΠΌΠ΅ случаСв развСртывания инструмСнта CLI ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ использования процСсса ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ для создания производствСнных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

Если ΠΈ package-lock.json , ΠΈ npm-shrinkwrap.json ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΊΠΎΡ€Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, npm-shrinkwrap.json Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Π° package-lock.json Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½.

Hidden Lockfiles

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΏΠΊΠΈ node_modules , npm начиная с вСрсии 7 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ «скрытый» node_modules/.package-lock.json Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π² node_modules / .package-lock.json . Он содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΄Π΅Ρ€Π΅Π²Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСсто чтСния всСй ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ node_modules ΠΏΡ€ΠΈ соблюдСнии ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… условий:

  • ВсС ΠΏΠ°ΠΏΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ссылаСтся, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ node_modules .
  • Π’ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ node_modules Π½Π΅Ρ‚ ΠΏΠ°ΠΏΠΎΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.
  • ИзмСнСнноС врСмя Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Π½Π΅Π΄Π°Π²Π½Π΅Π΅,ΠΊΠ°ΠΊ ΠΈ Ρƒ всСх ΠΏΠ°ΠΏΠΎΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Π°,Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ссылаСтся.

Π’ΠΎ Π΅ΡΡ‚ΡŒ,скрытый lockfile Π±ΡƒΠ΄Π΅Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС,Ссли ΠΎΠ½ Π±Ρ‹Π» создан Π² Ρ€Π°ΠΌΠΊΠ°Ρ… послСднСго обновлСния Π΄Π΅Ρ€Π΅Π²Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².Если Π΄Ρ€ΡƒΠ³ΠΎΠΉ CLI ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π΄Π΅Ρ€Π΅Π²ΠΎ,это Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ,ΠΈ скрытый Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ , Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ , Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ врСмя ΠΏΠ°ΠΏΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π½Π΅ измСняСтся. НапримСр, Ссли Π²Ρ‹ добавляСтС Ρ„Π°ΠΉΠ» Π² node_modules/foo/lib/bar.js , Ρ‚ΠΎ врСмя измСнСния Π½Π° node_modules/foo Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. Если Π²Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² node_modules , ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π² node_modules/.package-lock.json .

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ скрытый Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ игнорируСтся Π±ΠΎΠ»Π΅Π΅ старыми вСрсиями npm, ΠΎΠ½ Π½Π΅ содСрТит возмоТностСй ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² Β«ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ…Β» Ρ„Π°ΠΉΠ»Π°Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ это lockfileVersion: 3 , Π° Π½Π΅ lockfileVersion: 2 .

Π Π°Π±ΠΎΡ‚Π° со старыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

Когда npm ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ· npm v6 ΠΈΠ»ΠΈ Ρ€Π°Π½Π΅Π΅ Π²ΠΎ врСмя процСсса установки ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΎΠ½ автоматичСски обновляСтся для получСния Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π»ΠΈΠ±ΠΎ ΠΈΠ· Π΄Π΅Ρ€Π΅Π²Π° node_modules , Π»ΠΈΠ±ΠΎ (Π² случаС пустых Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² node_modules ΠΈΠ»ΠΈ ΠΎΡ‡Π΅Π½ΡŒ старых Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ) ΠΈΠ· рССстра npm.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π°

name

Имя ΠΏΠ°ΠΊΠ΅Ρ‚Π°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ блокируСтся ΠΏΠ°ΠΊΠ΅Ρ‚. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ находится Π² package.json .

version

ВСрсия ΠΏΠ°ΠΊΠ΅Ρ‚Π°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ установлСна ​​блокировка ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ находится Π² package.json .

lockfileVersion

ЦСлочислСнная вСрсия, начиная с 1 с Π½ΠΎΠΌΠ΅Ρ€Π° вСрсии этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, сСмантика ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ использовалась ΠΏΡ€ΠΈ создании этого package-lock.json .

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ измСнился Π² npm v7, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² node_modules ΠΈΠ»ΠΈ рССстрС npm. Π€Π°ΠΉΠ»Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, созданныС npm v7, Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ lockfileVersion: 2 .

  • ВСрсия Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π°:»Π΄Ρ€Π΅Π²Π½ΠΈΠΉ» shrinkwrap-Ρ„Π°ΠΉΠ» ΠΈΠ· вСрсии npm,ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ npm v5.
  • 1 : вСрсия Ρ„Π°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² npm v5 ΠΈ v6.
  • 2 : вСрсия Ρ„Π°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ npm v7, которая ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ совмСстима с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ v1.
  • 3 : вСрсия Ρ„Π°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ npm v7, Π±Π΅Π· возмоТности ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости. Π­Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для скрытого node_modules/.package-lock.json Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² node_modules / .package-lock.json ΠΈ, вСроятно, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ вСрсии npm, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° npm v6 пСрСстанСт Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ.

npm всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ,Π΄Π°ΠΆΠ΅ Ссли это Π½Π΅ Ρ‚Π° вСрсия,для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½.

packages

Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚,ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сопоставляСт мСстополоТСниС ΠΏΠ°ΠΊΠ΅Ρ‚Π° с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ,содСрТащим ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± этом ΠΏΠ°ΠΊΠ΅Ρ‚Π΅.

ΠšΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ указываСтся с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ "" , Π° всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ пСрСчислСны с ΠΈΡ… ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ путями ΠΎΡ‚ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ДСскрипторы ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ поля:

  • вСрсия: вСрсия, найдСнная Π² package.json

  • resolved:ΠœΠ΅ΡΡ‚ΠΎ,ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΏΠ°ΠΊΠ΅Ρ‚ Π±Ρ‹Π» фактичСски Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½.Π’ случаС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²,взятых ΠΈΠ· рССстра,это Π±ΡƒΠ΄Π΅Ρ‚ ссылка Π½Π° tarball.Π’ случаС git-зависимостСй это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ git url с commit sha.Π’ случаС зависимостСй ΠΎΡ‚ ссылок это Π±ΡƒΠ΄Π΅Ρ‚ мСстополоТСниС Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ссылки.

  • Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ: sha512 стандартной цСлостности субрСсурсов sha512 ΠΈΠ»ΠΈ sha1 для Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π°, распакованного Π² этом мСстС.

  • ссылка:Π€Π»Π°Π³,ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ,Ρ‡Ρ‚ΠΎ это символичСская ссылка.Если ΠΎΠ½ присутствуСт,Π΄Ρ€ΡƒΠ³ΠΈΠ΅ поля Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ,ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ†Π΅Π»ΡŒ ссылки Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

  • dev, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, devOptional: Ссли ΠΏΠ°ΠΊΠ΅Ρ‚ являСтся строго Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΄Π΅Ρ€Π΅Π²Π° devDependencies , Ρ‚ΠΎΠ³Π΄Π° dev Π±ΡƒΠ΄Π΅Ρ‚ истинным. Если это строго Ρ‡Π°ΡΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²Π° optionalDependencies , Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ optional . Если это ΠΈ dev Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ optional Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π΅-Π”Π΅Π²Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ devOptional Π±ΡƒΠ΄Π΅Ρ‚ установлСно. ( optional Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ зависимости dev Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊ dev ,Ρ‚Π°ΠΊ ΠΈ optional .)

  • inBundle:Π€Π»Π°Π³,ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Ρ‚ΠΎ,Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ являСтся Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ,входящСй Π² ΠΏΠ°ΠΊΠ΅Ρ‚.

  • hasInstallScript: Ρ„Π»Π°Π³, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ , Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ preinstall , install ΠΈΠ»ΠΈ postinstall сцСнарий.

  • hasShrinkwrap: Ρ„Π»Π°Π³, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» npm-shrinkwrap.json .

  • bin, лицСнзия, Π΄Π²ΠΈΠΆΠΊΠΈ, зависимости, optionalDependencies: поля ΠΈΠ· package.json

dependencies

Π£ΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ вСрсий npm, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… lockfileVersion: 1 . Π­Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ зависимостСй. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ структура ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° строго иСрархичСская, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях слоТно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ зависимости ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ссылок.

npm v7 ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ этот Ρ€Π°Π·Π΄Π΅Π», Ссли присутствуСт Ρ€Π°Π·Π΄Π΅Π» packages , Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ npm v6 ΠΈ npm v7.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ зависимостСй ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ поля:

  • version:спСцификатор,ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π² зависимости ΠΎΡ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ.

    • связныС зависимости:НСзависимо ΠΎΡ‚ источника,это Π½ΠΎΠΌΠ΅Ρ€ вСрсии,ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ носит чисто ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€.
    • источники рССстра: это Π½ΠΎΠΌΠ΅Ρ€ вСрсии. (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 1.2.3 )
    • git sources: это спСцификатор git с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠΉ фиксациСй. (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, git+https://example.com/foo/bar#115311855adb0789a0466714ed48a1499ffea97e )
    • http tarball sources: это URL-адрСс tarball. (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, https://example.com/example-1.3.0.tgz )
    • Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ источники tarball: это URL Ρ„Π°ΠΉΠ»Π° tarball. (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, file:///opt/storage/example-1.3.0.tgz )
    • Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ источники ссылок: это URL-адрСс Ρ„Π°ΠΉΠ»Π° ссылки. (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, file:libs/our-module )
  • Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ: sha512 стандартной цСлостности субрСсурсов sha512 ΠΈΠ»ΠΈ sha1 для Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π°, распакованного Π² этом мСстС. Для зависимостСй git это фиксация sha.

  • Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½:Для источников рССстра это ΠΏΡƒΡ‚ΡŒ ΠΊ tarball ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ URL рССстра.Если URL tarball Π½Π΅ находится Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ сСрвСрС,Ρ‡Ρ‚ΠΎ ΠΈ URL рССстра,Ρ‚ΠΎ это ΠΏΠΎΠ»Π½Ρ‹ΠΉ URL.

  • bundled:Если true,Ρ‚ΠΎ это Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ установлСна Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ.ΠŸΡ€ΠΈ установкС этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ модуля Π½Π° этапС извлСчСния,Π° Π½Π΅ установлСн ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ.

  • dev:Если true,Ρ‚ΠΎ эта Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ являСтся Π»ΠΈΠ±ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π’ΠžΠ›Π¬ΠšΠž ΠΎΡ‚ модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня,Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ Π½Π΅Π³ΠΎ.Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ false для зависимостСй,ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ зависимости Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня,Π½Π΅ связанной с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ.

  • optional:Если true,Ρ‚ΠΎ эта Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ являСтся Π»ΠΈΠ±ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π’ΠžΠ›Π¬ΠšΠž модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня,Π»ΠΈΠ±ΠΎ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ….Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ false для зависимостСй,ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня,Ρ‚Π°ΠΊ ΠΈ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π½Π΅ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ зависимости Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня.

  • Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚: это ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ модуля Π² Π²Π΅Ρ€ΡΠΈΡŽ. Π­Ρ‚ΠΎ список всСго, Ρ‡Ρ‚ΠΎ трСбуСтся для этого модуля, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ установлСн. ВСрсия Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° сопоставлСния зависимости Π»ΠΈΠ±ΠΎ Π² Π½Π°ΡˆΠΈΡ… dependencies Π»ΠΈΠ±ΠΎ Π½Π° Π±ΠΎΠ»Π΅Π΅ высоком ΡƒΡ€ΠΎΠ²Π½Π΅, Ρ‡Π΅ΠΌ ΠΌΡ‹.

  • зависимости:Зависимости этой зависимости,Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅,ΠΊΠ°ΠΊ ΠΈ Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

Π‘ΠΌ.Ρ‚Π°ΠΊΠΆΠ΅

Роль package-lock.json, настройка ΠΈ использованиС ΠΊΠ°Ρ€ΠΌΡ‹

ПослС npm 5.0 послС установки npm Π±ΡƒΠ΄Π΅Ρ‚ package-lock.json. Π§Ρ‚ΠΎ это Π·Π° функция?

1. Π—Π°Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠΉΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ вСрсии ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π²ΠΎ врСмя установки ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² git, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ всСх зависимых ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

2. package-lock.json — это Ρ„Π°ΠΉΠ», сгСнСрированный Π²ΠΎ врСмя `npm install` для записи ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ источника ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° вСрсии ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° npm, фактичСски установлСнного Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ состоянии.

3. Какая ΠΎΡ‚ этого польза? ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ npm являСтся ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ для управлСния зависимостями ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ, ΠΎΠ½ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ зависимости своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ npm Π² сСрСдинС pacakge.ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎΠžΠ±Ρ€Π°Ρ‚Π½ΠΎ (Π½ΠΎΠ²Ρ‹Π΅) совмСстимыС зависимости, Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли вСрсия Ρ‚ΠΈΠΏΠΎΠ² / ΡƒΠ·Π»Π° большС 8.0.33 ΠΈ совпадаСт с основным Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ вСрсии (8), послСдняя вСрсия ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² / ΡƒΠ·Π»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π°. НапримСр, конкрСтная вСрсия, которая Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° ΠΏΡ€ΠΈ запускС npm install, 8.0.35.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ послСднСго ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² Π½ΠΎΠ²ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ совмСстимости, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ npm — это ΠΌΠΈΡ€ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, сСмантика вСрсии ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠΉ, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ этому строгому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. : Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с Ρ‚Π΅ΠΌ ΠΆΠ΅ основным Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ вСрсии соотвСтствуСт трСбованиям совмСстимости. Π’ это врСмя Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π±ΠΎΠ»ΠΈΡ‚ Π³ΠΎΠ»ΠΎΠ²Π°: Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±Π°Π·Π΅ ΠΊΠΎΠ΄Π° nodejs, Π² Ρ€Π°Π·Π½ΠΎΠ΅ врСмя ΠΈΠ»ΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… источниках Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ npm вСрсии Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² зависимых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ, поэтому характСристики повСдСния ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² зависимых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Ρ‚Π°ΠΊΠΆΠ΅ Π Π°Π·Π½Ρ‹Π΅, ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ нСсовмСстимыС.

Ρ€Π΅ΡˆΠΈΡ‚ΡŒ:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, послСдняя вСрсия npm Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ автоматичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ package-lock.json, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° Π²Ρ‹ сохраняСтС исходный Ρ„Π°ΠΉΠ» Π½Π° Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΈΠ»ΠΈ Π² Π½ΠΎΠ²ΠΎΠΌ источникС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, просто слСдуйтС этой Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ зависимый ΠΏΠ°ΠΊΠ΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ вСрсии, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΊΠ°ΠΊ .json, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ установили Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π·.

4. НСдостатки package.json

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ„Π°ΠΉΠ» package.json ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, которая являСтся ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ†ΠΈΡ„Ρ€ΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ€Π° вСрсии, ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ второстСпСнныС вСрсии. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ устанавливаСтС npm, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠΎΠ΄ основной вСрсиСй для ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Учитывая, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ боимся ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ зависимыС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΠΎ своСму ТСланию, это Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, тСстирования / Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΈ ΠΈ Ρ‚.Π΄., поэтому Ρ„Π°ΠΉΠ» package-lock.json Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚, ΠΈ ΠΎΠ½ блокируСтся Π² вас ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ устанавливаСтС Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ. Π­Ρ‚Π° вСрсия установлСна.

5. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ зависимости установки:

Π§Ρ‚ΠΎ, Ссли ΠΏΡ€ΠΈ установкС Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Π΅ΡΡ‚ΡŒ ошибка, ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΠΎΠ·ΠΆΠ΅?

РаньшС: Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Π² package.json, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ npm.

БСйчас: Π½ΠΎ это Π½Π΅ поддСрТиваСтся послС вСрсии 5, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ вСрсия Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π° Π² package-lock.json, поэтому ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ npm install xxx @ xxx для обновлСния Π½Π°ΡˆΠΈΡ… зависимостСй, Π° Π·Π°Ρ‚Π΅ΠΌ package-lock.json Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ соотвСтствСнно.

НапримСр:

Если я установил jquery 2.1.4 ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» package.json ΠΈ package-lock.json ΠΈΠ· git, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ моя установка npm ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ зависимости Π² node_modules?

На самом Π΄Π΅Π»Π΅, Ρƒ мСня Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ этот вопрос, поэтому я ΠΏΡ€ΠΎΠ²Π΅Π» тСст. ПослС прямого обновлСния Π΄Π²ΡƒΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² package.json ΠΈ package-loc.json, npm install ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, поэтому ΠΏΡ€ΠΈ совмСстной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ эти Π΄Π²Π° Ρ„Π°ΠΉΠ»Π° Если Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹, ваша срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ npm install.

1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

Karma — это Π½Π΅ срСда тСстирования ΠΈ Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ.

Karma — это инструмСнт тСстирования, инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ JavaScript Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…, прСдоставляя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ срСду тСстирования.

Код ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для выполнСния Π½Π° сторонС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ошибки ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π² тСстС Π² срСдС ΡƒΠ·Π»Π°; ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρƒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ, ΠΊΠ°Ρ€ΠΌΠ° прСдоставляСт срСдства для автоматичСского запуска вашСго ΠΊΠΎΠ΄Π° Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… (Chrome, Firefox, Ρ‚.Π΅. ΠΈ Ρ‚. Π΄.). Если ваш ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° сторонС ΡƒΠ·Π»Π°, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ€ΠΌΡƒ.

Когда ΠΌΠ½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠšΠ°Ρ€ΠΌΡƒ?

  • Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅
  • Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… (ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, мобильноС устройство, ΠΏΠ»Π°Π½ΡˆΠ΅Ρ‚ ΠΈ Ρ‚. Π”.)
  • Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ тСсты локально Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
  • Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ тСсты Π½Π° сСрвСрС Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
  • Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ тСст ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° сохраняСтС
  • МнС нравится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» для Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ
  • Π― Π½Π΅ Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваш ΠΊΠΎΠ΄ тСстировался ΠΏΠ»ΠΎΡ…ΠΎ
  • Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π‘Ρ‚Π°ΠΌΠ±ΡƒΠ» для автоматичСского создания ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ
  • Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ RequireJS для исходных Ρ„Π°ΠΉΠ»ΠΎΠ²

Π”Π²Π°, конфигурация

Π‘Π½Π°Ρ‡Π°Π»Π° установитС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€ΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΊΠ°Ρ€ΠΌΡ‹

image.png

  1. ΠšΠ°ΠΊΡƒΡŽ срСду тСстирования Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?
    (1) Jasmine (BDD, обСспСчиваСт Π²Ρ‹Π²ΠΎΠ΄ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅)
    (2) Mocha
    β‘  МоТно ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ простыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ JavaScript, Ρ‚Π°ΠΊ ΠΈ асинхронный ΠΊΠΎΠ΄, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· характСристик JavaScript.
    β‘‘ ВсС тСсты ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ автоматичСски ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ тСсты.
    β‘’ΠžΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΄ΠΎ, послС, beforeEach ΠΈ afterEach для написания ΠΊΠΎΠ΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
    (3) Qunit(JqueryοΌ‰
    (4) Nodeunit (прСдоставляСт простыС асинхронныС ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ тСсты для node.js ΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ².)
    (5) Nunit (интСграция Π² VS)
  2. Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ require.js? НСт (ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ инструмСнт спСцификации AMD)
  3. Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ автоматичСски Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹?
    (1) Chrome
    (2) ChromeHeadless (Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Google Chrome Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π±Π΅Π· Π³ΠΎΠ»ΠΎΠ²Ρ‹ — Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π±Π΅Π· Π³ΠΎΠ»ΠΎΠ²Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для автоматичСского тСстирования ΠΈ сСрвСров, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки)
    (3) ChromeCanary (Π΄Π²Π΅ вСрсии Chrome ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ установлСны / Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, установлСны ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ путям, с использованиСм ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½Ρ‹Ρ… Π·Π½Π°Ρ‡ΠΊΠΎΠ², сочСтаний клавиш ΠΈ Ρ‚. Π΄., ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Chrome Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· ΠΏΠΎΠΌΠ΅Ρ…)
    (4) Firefox
    (5) Safari
    (6) PhantomJS (основан Π½Π° JavaScript API webkit, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ QtWebKit Π² качСствС основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, Π° webkit ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для компиляции, объяснСния ΠΈ выполнСния ΠΊΠΎΠ΄Π° JavaScript)
    (7) Opera
    (8) IE
  4. Π“Π΄Π΅ исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ тСстовыС Ρ„Π°ΠΉΠ»Ρ‹? Β»./tests/unit/*.spec.js’
  5. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΉΠ»Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ шаблон?
  6. Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Karma ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π»Π° всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ запускала тСсты ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ?

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Karma.conf.js (с ΠΈΠΌΠ΅Π½Π΅ΠΌ:Conf, Π° Π½Π΅ config)

// Karma configuration
// Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ 4 апрСля 2019 Π³., 09:59:06 GMT + 0800 (китайскоС стандартноС врСмя)

const webpackConfig =  require('@vue/cli-service/webpack.config.js')

module.exports = function(config) {
  config.set({
         // Основной ΠΏΡƒΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹
    basePath: '',

         // ДоступныС Ρ„Ρ€Π΅ΠΉΠΌΡ‹: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['mocha'],

         // Бписок Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€
    files: [
      './tests/unit/*.spec.js'
    ],

         // Бписок ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
    exclude: [
      'node_modules'
    ],

         // ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ использованиСм Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅
         // Доступный прСпроцСссор: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
        '**/*.spec.js': ['webpack']
    },

         // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ€Π΅ΠΏΠΎΡ€Ρ‚Π΅Ρ€ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² тСста
         // Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния: Β«Ρ‚ΠΎΡ‡ΠΊΠΈΒ», «прогрСсс»
         // ДоступныС Ρ€Π΅ΠΏΠΎΡ€Ρ‚Π΅Ρ€Ρ‹: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ['progress'],

         // НомСр сСрвисного ΠΏΠΎΡ€Ρ‚Π°
    port: 9876,

         // конфигурация webpack
    webpack: webpackConfig,

         // Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΆΡƒΡ€Π½Π°Π»Π΅
    colors: true,

         // ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΆΡƒΡ€Π½Π°Π»Π°
         // Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,

         // Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ автоматичСского обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ² для тСстирования
    autoWatch: true,

         // ВСстируСм Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['Chrome'],

         // Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
         // Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Karma ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ тСст ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²Ρ‹ΠΉΠ΄Π΅Ρ‚
    singleRun: false,

         // Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° (количСство Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ²)
    concurrency: Infinity
  })
}

webpack.test.config.js

var path = require("path")
var webpack = require("webpack")

function resolve(dir) {
    return path.join(__dirname, '..', dir)
}

var webpackConfig = {
    module: {
        rules: [
            // babel-loader
            {
                test: /\.js$/,
                use: 'babel-loader',
                include: [resolve('src'), resolve('test')]
            },
            // vue loader
            {
                test: /\.vue$/,
                use: [{
                    loader: 'vue-loader',
                    options: {
                        loaders: {
                            js: 'babel-loader'
                        },
                    }
                }]
            },
        ]
    },

    resolve: {
        extensions: ['.js', '.vue', '.json'],
        alias: {
            'vue$': 'vue/dist/vue.esm.js',
            '@': resolve('src'),
        }
    },

    plugins: [
        new webpack.DefinePlugin({
            'process.env': {
                NODE_ENV: '"production"'
            }
        })
    ]
}

module.exports = webpackConfig

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Babel-loader js, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ js, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ, Π² js, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ
основной ΠΏΠ°ΠΊΠ΅Ρ‚

  • babel-core: сам ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ babel, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт API ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Babel, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ babel.transform, для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΊΠΎΠ΄Π°. Babel-loader, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ webpack, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ эти API для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ процСсса ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°.
  • babylon: лСксичСский парсСр для js
  • babel-traverse: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ±Ρ…ΠΎΠ΄Π° AST (абстрактноС синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ компиляции ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ), Π² основном для ΠΏΠ»Π°Π³ΠΈΠ½Π°
  • babel-generator: Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° основС AST

ΠŸΠ΅Ρ€Π΅Π²Π΅ΡΡ‚ΠΈ ΠΊΠΎΠ΄ ES6 Π² ΠΊΠΎΠ΄ ES5

image.png

Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, установитС зависимости ΠΊΠ°Ρ€ΠΌΡ‹

npm install --save-dev @vue/test-utils karma karma-chrome-launcher karma-mocha karma-sourcemap-loader karma-spec-reporter karma-webpack mocha

image.png

Π§Π΅Ρ‚Ρ‹Ρ€Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ скрипты Π² package.json

"test:karma": "karma start"

Π’ΠΎΠ³Π΄Π° Π±Π΅Π³ΠΈ

npm run test:karma

Или Π±Π΅Π³ΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ

karma start

image.png

Β 

image.png

Β 

Β 

Π‘Π΅Π· ΠΊΠ°Ρ€ΠΌΡ‹ (Ρ‚Π°ΠΊΠΆΠ΅ с использованиСм ΠΌΠΎΠΊΠΊΠΎ)

Β 

Β 

Β 

node.js — Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽ Π»ΠΈ я Ρ„Π°ΠΉΠ» package-lock.json, созданный npm 5?

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ npm для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… / ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… css / js ΠΈ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ javascript, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π½Π° страницах, обслуТиваСмых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ django. Π’ ΠΌΠΎΠΈΡ… прилоТСниях Javascript запускаСтся Π½Π° страницС для создания Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, ΠΈΠ½ΠΎΠ³Π΄Π° выполняСт Π²Ρ‹Π·ΠΎΠ²Ρ‹ ajax, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… VUE ΠΈ / ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с CSS. Если package-lock.json ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСимущСствСнный ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ содСрТимым package.json, Ρ‚ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½Π° вСрсия этого Ρ„Π°ΠΉΠ»Π°.По ΠΌΠΎΠ΅ΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ, это Π»ΠΈΠ±ΠΎ Π½Π΅ влияСт Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ установлСно с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ npm install, Π»ΠΈΠ±ΠΎ, Ссли Π΄Π°, Ρ‚ΠΎ Π½Π° сСгодняшний дСнь Π½Π΅ повлияло ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°ΡŽ, насколько ΠΌΠ½Π΅ извСстно. Π― Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ mongodb ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ½ΠΊΠΈΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ.

Π― ΡƒΠ΄Π°Π»ΡΡŽ package-lock.json ΠΈΠ· Ρ€Π΅ΠΏΠΎ
ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ npm install создаСт этот Ρ„Π°ΠΉΠ», Π° npm install являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ процСсса развСртывания Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ сСрвСрС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ вСрсий ΡƒΠ·Π»Π° ΠΈ npm выполняСтся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ сСрвСрС, Π½ΠΎ я ΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ.

Когда Π½Π° сСрвСрС запускаСтся npm install , ΠΎΠ½ измСняСт package-lock.json,
ΠΈ Ссли Π΅ΡΡ‚ΡŒ измСнСния Π² Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записан Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ Π½Π° сСрвСрС, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ WONT ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ измСнСния ΠΈΠ· источника. Π’ΠΎ Π΅ΡΡ‚ΡŒ
Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ запрос ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ измСнСния, внСсСнныС Π² package-lock.json.

Π’Ρ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ локально сгСнСрированный package-lock.json Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ находится Π² Ρ€Π΅ΠΏΠΎ (ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ мастСр ТСсткого происхоТдСния), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ npm Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ запускаСтС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ссли package-lock.json Π½Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ находится Π² node_modules ΠΈΠ·-Π·Π° установки npm, Ρ‡Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли это ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² node_modules Π±Ρ‹Π»ΠΈ установлСны Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии, это снова Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΎ Ρƒ мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Если node_modules Π½Π΅Ρ‚ Π² вашСм Ρ€Π΅ΠΏΠΎ (Π° это Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ), Ρ‚ΠΎ package-lock.json слСдуСт ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Если ΠΌΠ½Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚, ΠΏΠΎΠΏΡ€Π°Π²ΡŒΡ‚Π΅ мСня Π² коммСнтариях, Π½ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вСрсиями взято ΠΈΠ· этого Ρ„Π°ΠΉΠ»Π°, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла. Π€Π°ΠΉΠ» package.json содСрТит Π½ΠΎΠΌΠ΅Ρ€Π° вСрсий, ΠΈ я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ этот Ρ„Π°ΠΉΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сборки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΠ³Π΄Π° происходит установка npm, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠ³Π΄Π° я Π΅Π³ΠΎ ΡƒΠ΄Π°Π»ΡΡŽ, npm install ТалуСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  ДТСйсон @ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ: introcart_wagtail $ rm package.json
jason @ localhost: introcart_wagtail $ npm ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ
npm WARN saveError ENOENT: Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ '/home/jason/webapps/introcart_devtools/introcart_wagtail/package.json'
  

, ΠΈ сборка Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΈ установкС node_modules ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ npm для сборки js / css Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΆΠ°Π»ΠΎΠ± Π½Π΅ ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ, Ссли я снимаю package-lock.json

  ДТСйсон @ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ: introcart_wagtail $ rm package-lock.json
ДТСйсон @ localhost: introcart_wagtail $ npm Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ dev

> [email protected] dev / home / jason / webapps / introcart_devtools / introcart_wagtail
> NODE_ENV = Π²Π΅Π±-ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ --progress --colors --watch --mode = Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

 10% Π·Π΄Π°Π½ΠΈΠ΅ 0/1 ΠΌΠΎΠ΄ΡƒΠ»ΠΈ 1 Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ ...
  

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ `npm update` ΠΈ` remove package-lock.json` плюс `npm install`?

Π’ package-lock.json Π² основном косвСнныС зависимости Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.ΠšΠΎΡΠ²Π΅Π½Π½Ρ‹Π΅ зависимости ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Ρ‚Π΅ зависимости, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² package.json вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ зависимостями Π²Π°ΡˆΠΈΡ… зависимостСй.

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ npm update --dev Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависимости ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ package.json . ПослС обновлСния записСй вызываСтся установка, эта установка обновляСт Π² package-lock.json Ρ‚Π΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈ стороны, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌΠΈ Π² package.json .Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ прямыС, Ρ‚Π°ΠΊ ΠΈ косвСнныС зависимости ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ»Π΅ package-lock.json . Но Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² package.json .
Π’Ρ€Π΅Ρ‚ΡŒΠΈ стороны, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌΠΈ Π² package.json , Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ Π² package-lock.json . (Π˜Ρ… прямая ΠΈ косвСнная зависимости ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ.)

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ rm package-lock.json ΠΈ npm install информация ΠΎ косвСнных зависимостях тСряСтся ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° .json . ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ npm install создаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ package-lock.json , ΠΈ косвСнныС зависимости ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ для всСх Π²Π°ΡˆΠΈΡ… зависимостСй.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Π’ package-lock.json Ρƒ нас Π΅ΡΡ‚ΡŒ косвСнная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ tslib: 1.9.0 .

  "Ρ†Π»ΠΈΠ±": {
  "вСрсия": "1.9.0",
  "Ρ€Π΅ΡˆΠ΅Π½ΠΎ": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
  "Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ": "sha512-f / qGG2tUkrISBlQZEjEqoZ3B2 + npJjIf04h2wuAv9iA8i04Icp + 61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ =="
},
  

tslib — это Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Angular, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ нСпосрСдствСнно Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ .4.9.3 ",
"транспортир": "~ 5.4.0",
"ts-node": "~ 5.0.1",
"Ρ†Π»ΠΈΠ½Ρ‚": "~ 5.9.1"
}

Если ΠΌΡ‹ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ npm update --dev , Π±ΡƒΠ΄ΡƒΡ‚ внСсСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния:

  + [email protected]
+ [email protected]
+ [email protected]
+ [email protected]
+ [email protected]
+ [email protected]
+ [email protected]
+ @ Ρ‚ΠΈΠΏΡ‹ / Тасмин @ 3.3.16
+ @ Ρ‚ΠΈΠΏΡ‹ / jasminewd2 @ 2.0.8
+ [email protected]
+ [email protected]
  

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ .json Π£Π³Π»ΠΎΠ²Ρ‹Π΅ зависимости Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°Π΅ΠΌ. ΠžΡ‚ΡΡŽΠ΄Π° слСдуСт, Ρ‡Ρ‚ΠΎ tslib Ρ‚Π°ΠΊΠΆΠ΅ остался Π² вСрсии 1.9.0 Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ package-lock.json .

Однако, Ссли ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΠΌ package-lock.json , ΡƒΠ΄Π°Π»ΠΈΠΌ node_modules , ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ обновлСния Π² package.json Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ npm install , ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ вновь сгСнСрированный ΠΏΠ°ΠΊΠ΅Ρ‚ package-lock. json , Ρ‡Ρ‚ΠΎ tslib Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ Π΄ΠΎ 1.12.0 . (Если ΠΌΡ‹ Π½Π΅ ΡƒΠ΄Π°Π»ΠΈΠΌ node_modules , Ρ‚Π° ΠΆΠ΅ вСрсия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ снова ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π° Π² package-lock.json , ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅.)

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² случаС npm update --dev ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ прямыС ΠΈ косвСнныС зависимости, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ связаны с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌΠΈ Π² package.json . Но Π² случаС rm package-lock.json ΠΈ npm install всС косвСнныС зависимости ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ package-lock.json

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим package-lock.json , ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ Π²Π°ΠΆΠ΅Π½ ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСстС с NPM CLI Π² повсСднСвной ΠΆΠΈΠ·Π½ΠΈ. .

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ

NPM вСрсии 5 прСдставил package-lock.json ΠΊΠ°ΠΊ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для Π·Π°Ρ…Π²Π°Ρ‚Π° Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° зависимостСй, установлСнного Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€ΠΈ совмСстной Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… срСдах, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС, ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ зависимости для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ вСрсии вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ.4.16.4 «.

Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒ этого модуля (Π±Π΅Π· использования package-lock.json ) Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ express вСрсии 4.16.4, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ установили послСднюю Π²Π΅Ρ€ΡΠΈΡŽ.

Если express ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ этого модуля ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости ΠΎΡ‚ Π½Π΅Π³ΠΎ, я ΠΌΠΎΠ³Ρƒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ.

Π‘ΠΈΠΌΠ²ΠΎΠ» ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ± этом.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли вСрсия 4.17.x содСрТит ΠΎΡˆΠΈΠ±ΠΊΡƒ, моя локальная установка Π½Π΅ удастся, Π½ΠΎ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсиСй.

Π’ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠ³Π»ΠΎ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π² производствСнной срСдС, ΠΈ Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Π΄Π°Π΅Ρ‚ сбой.

Π”ΠΎ вСрсии 5 NPM Π²Ρ‹ использовали Π±Ρ‹ Ρ‚Π΅Ρ€ΠΌΠΎΡƒΡΠ°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΏΠ»Π΅Π½ΠΊΡƒ . Он отличаСтся ΠΎΡ‚ package-lock.json Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ вмСстС с вашим ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Π² рССстрС NPM, Π° package-lock.json — Π½Π΅Ρ‚.

Если всС участники ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NPM + 5, Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ package-lock.json для Π½Π΅ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

Но Ссли Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Π΅Π³ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π»ΠΈ Π²Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ устанавливали Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Π΄ΠΈΠΊΡ‚ΡƒΠ΅Ρ‚Π΅, ΠΈΠ»ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ Π² этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ. Π’ΠΎΡ‚ Π±ΠΎΠ»Π΅Π΅ подробная вСрсия ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ.

Π˜Ρ‚Π°ΠΊ, package-lock.json Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй, установлСнноС Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π€ΠΎΡ€ΠΌΠ°Ρ‚ описан Π½Π° страницС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ NPM.

Зафиксировав Π΅Π³ΠΎ Π² своСй VCS — Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ — Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ воспроизвСсти Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй с Ρ‚ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ВсСгда фиксируйтС package-lock.json Π² VCS, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ зависимостСй Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ всС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости, ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, это Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ смоТСтС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ фиксации ΠΈ воспроизвСсти состояниС зависимостСй ΠΊΠ°ΠΆΠ΄ΠΎΠΉ фиксации.

package.json ΠΈ package-lock.json

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ package-lock.json Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π­Ρ‚ΠΎ автоматичСски обрабатываСтся NPM. Он ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ измСнСния, внСсСнныС Π² package.json Π² package-lock.json , ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии.

Однако это происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ CLI NPM для внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Если Π²Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ package.json , Π½Π΅ ΠΆΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ package-lock.json обновится. ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ интСрфСйса ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ , ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈ Ρ‚. Π”.

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NPM CLI

NPM автоматичСски сгСнСрируСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π° .json , ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NPM ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ.

установка npm (с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ модулями Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²)

install ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ для установки Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнят ΠΊΠ°ΠΊ package.json , Ρ‚Π°ΠΊ ΠΈ package-lock.json , ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй измСнится.

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

 npm ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ экспрСсс body-parser cors 

npm install (Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²)

install попытаСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС зависимости, относящиСся ΠΊ package-lock.json .

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ здСсь являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ install ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ package-lock.json , Ссли ΠΎΠ½ зарСгистрируСт, Ρ‡Ρ‚ΠΎ ΠΎΠ½ устарСл.

НапримСр, Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ измСняСт package.json — скаТСм, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ½ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это просто вопрос удалСния ΠΎΠ΄Π½ΠΎΠΉ строки — Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊΡ‚ΠΎ-Ρ‚ΠΎ запустит npm install , ΠΎΠ½ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ -lock.json , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСпросто.ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ своСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, запускаСтС npm install , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ, ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ сразу ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΊΡƒΡ‡Ρƒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² вашСм Π΄Π΅Ρ€Π΅Π²Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ смысла.

Π’Π°ΠΊΠΆΠ΅ вСсьма вСроятно, Ρ‡Ρ‚ΠΎ измСнСния Π² вашСм Π΄Π΅Ρ€Π΅Π²Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ смысла для людСй, ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ваши измСнСния.

npm ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ

Аналогично , установитС , Π½ΠΎ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π­Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ ΠΊΠ°ΠΊ package.json , Ρ‚Π°ΠΊ ΠΈ package-lock.Π‘ΠΈΠΌΠ²ΠΎΠ» ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ NPM ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ новая вСрсия Π² области дСйствия 1.X.X , ΠΈ, Ссли Π΅ΡΡ‚ΡŒ, ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π΅. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ символы ~ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ исправлСний, ΠΈΠ»ΠΈ 1.4.X .

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ package-lock.json ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ (Π½ΠΎ Π½Π΅ бСсполСзным).

Π½ΠΏΠΌ ci

ci установит всС зависимости, относящиСся ΠΊ package-lock.json Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ . ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ здСсь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ package-lock.json Π½ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ….

Π•Π³ΠΎ Ρ†Π΅Π»ΡŒ — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅ΠΉ срСдС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ сСрвСры, Π³Π΄Π΅ установка происходит Π² автоматичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎΠ± этих Π²Π°ΠΆΠ½Ρ‹Ρ… Π²Ρ‹Π²ΠΎΠ΄Π°Ρ… ΠΏΡ€ΠΈ использовании package-lock.json :

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ npm install Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для получСния зависимостСй — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для этого npm ci .Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ npm install для установки ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… зависимостСй.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ npm ci Π²Π΅Π·Π΄Π΅, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ локальноС Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй — Π΄Π°ΠΆΠ΅ Π² вашСй локальной срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ВыполняйтС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΡƒΡŽΡΡ Π·Π°Π΄Π°Ρ‡Ρƒ, скаТСм, Ρ€Π°Π· Π² мСсяц, для обновлСния Π²Π°ΡˆΠΈΡ… зависимостСй. (Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ​​слуТбу, ΠΊΠ°ΠΊ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, Π½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ тСстовоС ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅).

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ваши зависимости ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹, ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ накоплСния тСхничСской задолТСнности.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ссылки

Π·Π°Π³Π»ΡƒΡˆΠΊΠ°

LogRocket: полная Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Π°ΡˆΠΈΡ… Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

LogRocket — это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ Π² вашСм собствСнном Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ³Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ происходят ошибки, ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ снимки экрана ΠΈ Π΄Π°ΠΌΠΏΡ‹ ΠΆΡƒΡ€Π½Π°Π»Π°, LogRocket позволяСт воспроизвСсти сСанс, Ρ‡Ρ‚ΠΎΠ±Ρ‹ быстро ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ. Он ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, нСзависимо ΠΎΡ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°, ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ для рСгистрации Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ контСкста ΠΈΠ· Redux, Vuex ΠΈ @ ngrx / store.

Помимо рСгистрации дСйствий ΠΈ состояния Redux, LogRocket записываСт ΠΆΡƒΡ€Π½Π°Π»Ρ‹ консоли, ошибки JavaScript, трассировки стСка, сСтСвыС запросы / ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΈ Ρ‚Π΅Π»Π°ΠΌΠΈ, ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»Ρ‹. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ DOM для записи HTML ΠΈ CSS Π½Π° страницС, воссоздавая Π²ΠΈΠ΄Π΅ΠΎ с ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ пиксСлСм Π΄Π°ΠΆΠ΅ для самых слоТных одностраничных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ бСсплатно.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ пакСтная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° json? Π€Π°ΠΉΠ»Ρ‹ Lockfiles для ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² пряТи ΠΈ npm

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ package-lock.json?

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ обсудим Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° npm package-lock.json , Π° Ρ‚Π°ΠΊΠΆΠ΅ yarn.lock Yarn. Π€Π°ΠΉΠ»Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° слуТат Π² качСствС ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠ³ΠΎ манифСста зависимостСй для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… указываСтся точная вСрсия устанавливаСмых зависимостСй, Π° Ρ‚Π°ΠΊΠΆΠ΅ зависимости этих зависимостСй ΠΈ Ρ‚. Π”. — для ΠΎΡ…Π²Π°Ρ‚Π° ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° зависимостСй.

Π€Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° сначала вводится Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΠ³Π΄Π° Π² этом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ выполняСтся новая установка зависимостСй. Π’ΠΎ врСмя установки всС Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй вычисляСтся ΠΈ сохраняСтся Π² Ρ„Π°ΠΉΠ»Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ вмСстС с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ зависимости, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • ВСрсия ΠΏΠ°ΠΊΠ΅Ρ‚Π°, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ установлСна ​​
  • Π₯эш цСлостности, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для подтвСрТдСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Π» ΠΏΠΎΠ΄Π΄Π΅Π»Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠ΅ располоТСниС Π² рССстрС, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅, ΠΎΡ‚ΠΊΡƒΠ΄Π° Π±Ρ‹Π» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ этот ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ для Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… установок

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ„Π°ΠΉΠ»Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ?

Π€Π°ΠΉΠ»Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для закрСплСния ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ всСх вСрсий всСго Π΄Π΅Ρ€Π΅Π²Π° зависимостСй Π²ΠΎ врСмя создания Ρ„Π°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.1.0.0 , Ρ‚ΠΎ Π΄Π²Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ установки, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ Π² Ρ€Π°Π·Π½ΠΎΠ΅ врСмя, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии dummy-pkg . Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ устанавливаСт dummy-pkg , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π²Π΅Ρ€ΡΠΈΡŽ 1.0.0, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· нСсколько ΠΌΠΈΠ½ΡƒΡ‚ этот ΠΏΠ°ΠΊΠ΅Ρ‚ выпускаСт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ 1.0.1. ПослС этого Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ установку Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ dummy-pkg вСрсии 1.0.1 вмСсто вСрсии 1.0.0.

ИспользованиС Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ установки останутся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΈ воспроизводимыми Π²ΠΎ всСм Π΄Π΅Ρ€Π΅Π²Π΅ зависимостСй, для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π»Π΅Π½ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… вмСстС, ΠΈ для Ρ€Π°Π·Π½Ρ‹Ρ… систСм, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ сборки CI.

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ?

БущСствуСт Π΄Π²Π° Ρ„Π°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для большСй части экосистСмы npm:

  • ΠŸΡ€ΡΠΆΠ° Π—Π°ΠΌΠΎΠΊ пряТи
  • npm’s package-lock.json

НСт Π½ΠΈΡ‡Π΅Π³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Π±Π»ΠΎΠΊ-схСмы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ эти Π΄Π²Π°:

На этой ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ npm package-lock.json , Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Π·Π΄Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° yarn.lock. ЕдинствСнноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ — процСсс ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° npm Π½Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ пряТу автоматичСски.lock, поэтому ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Ρ€Ρ…ΠΈΠ², Ссли явно Π½Π΅ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ Π² Ρ„Π°ΠΉΠ»Π΅ .npmignore . Однако, ΠΊΠ°ΠΊ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π² Π»Π΅Π²ΠΎΠΉ части ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ, Π΄Π°ΠΆΠ΅ Ссли этот Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° сущСствуСт ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΎΠ½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.

И yarn, ΠΈ npm Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… зависимостСй; ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Волько ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся дСйствиС установки, ищСтся для всСго Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° зависимостСй Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ диспСтчСр ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ манифСстом зависимостСй.

Напильники с тСрмоусадочной ΠΏΠ»Π΅Π½ΠΊΠΎΠΉ

Никогда Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π°.
Π•ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ случай, ΠΊΠΎΠ³Π΄Π° сущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ учитываСтся Π΄Π°ΠΆΠ΅ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… зависимостСй. Π€Π°ΠΉΠ» npm-shrinkwrap.json закрСпляСт Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй, ΠΊΠ°ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π½ΠΎ процСсс ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ npm Ρ‚Π°ΠΊΠΆΠ΅ фиксируСт этот Ρ„Π°ΠΉΠ» Π² рССстрС. Π§Ρ‚ΠΎ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ установку npm, Ρ„Π°ΠΉΠ» shrinkwrap Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ вСрсии ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ, Π° Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ semver, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ происходит Π²ΠΎ врСмя установки.

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ yarn ΠΈ npm ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ npm-shrinkwrap.json , Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

  • npm всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ зависимости, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² npm-shrinkwrap.json , Π½Π° собствСнный ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² ΠΏΠ°ΠΏΠΊΡƒ node_modules / ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠ³Π»Π°Π΄ΠΈΡ‚ΡŒ это Π΄Π΅Ρ€Π΅Π²ΠΎ.
  • ΠŸΡ€ΡΠΆΠ°

  • Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ npm-shrinkwrap.json ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ.

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Ρ„Π°ΠΉΠ» Π² Ρ‚Π΅Ρ€ΠΌΠΎΡƒΡΠ°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΏΠ»Π΅Π½ΠΊΡƒ? Π§Ρ‚ΠΎ ΠΆ, это позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ ΠΊΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ зависимости своих собствСнных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ извСстныС вСрсии.Однако это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ обслуТивания всСго Π΄Π΅Ρ€Π΅Π²Π° зависимостСй. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сТатый Ρ„Π°ΠΉΠ», Π½Π΅Ρ‚ нСобходимости Π² сущСствовании ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² систСмС управлСния вСрсиями. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ hapijs.

Напильники для Π΄Ρ€Π΅ΠΉΡ„ΡƒΡŽΡ‰ΠΈΡ… Π·Π°ΠΌΠΊΠΎΠ²

Π€Π°ΠΉΠ»Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, добавляя Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ устанавливая зависимости для исходного ΠΊΠ»ΠΎΠ½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ зависимости ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²ΠΎ врСмя Ρ†ΠΈΠΊΠ»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли ΠΎΠ½ΠΈ внСсут измСнСния Π² ΠΏΠ°ΠΊΠ΅Ρ‚ ?json ΠΈ Π·Π°Π±Ρ‹Π»ΠΈ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ?

Когда ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ package.json Π½Π΅ синхронизирован с Ρ„Π°ΠΉΠ»ΠΎΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ npm ΠΈ yarn, ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΈ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ манифСст. Π₯отя это Π·Π²ΡƒΡ‡ΠΈΡ‚ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Π½Π° самом Π΄Π΅Π»Π΅ это Ρ€Π΅Ρ†Π΅ΠΏΡ‚ для ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ссли это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π²ΠΎ врСмя CI.

Если Π½Π° этапС сборки Π½Π΅ происходит сбой ΠΈΠ·-Π·Π° отклонСния Ρ„Π°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΡ‚ заявлСнных зависимостСй Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ package.json , это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ создаваСмыС ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ сборки, Ρ‚Π΅ΠΌ самым Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ всСм прСимущСствам Ρ„Π°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, рСкомСндуСтся ΠΏΠΎΡΠΎΠ²Π΅Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΈ установкС зависимостСй, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

 
$ yarn install --frozen-lock Ρ„Π°ΠΉΠ»
$ npm ci
  

Lockfiles для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

МнСния ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, являСтся Π»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ основным ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ фактичСски являСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ для использования ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ.

БущСствуСт консСнсус Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ - Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ. Π­Ρ‚ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ?

Π“Π»Π°Π²Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ² наличия Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ нСсоотвСтствиС Π² зависимостях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ фактичСски ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ. Из-Π·Π° этого нСсоотвСтствия Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π΅ замСтят критичСских сборок.

Однако, Ссли Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, зависимости Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя установки ΠΈ, вСроятно, Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ для ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² любом случаС.

Π›ΠΈΡ‡Π½ΠΎ я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ для совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‡Π»Π΅Π½ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ воспроизводимых сборок.

ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ - Ссли Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚Π΅ΡΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ зависимости вашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½Ρ‹ для Π²Π°ΡˆΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ сборки CI для устранСния этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ:

  • Один, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠ°ΠΊ ΠΈ Π»ΡŽΠ±ΡƒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ сборки для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
  • Π”Ρ€ΡƒΠ³ΠΎΠΉ - ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ зависимости Π² соотвСтствии с ΠΈΡ… послСднСй вСрсиСй semver.

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ позволяСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ воспроизводимыС сборки ΠΈ согласованныС зависимости для Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ критичСскиС измСнСния для ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ вашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ - ΠΈ всС это, сохраняя ΠΏΡ€ΠΈ этом всСх Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π² вашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅. счастливый.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ package-lock.json?

Π’ этом руководствС ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ, Π² Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ package.json ΠΈ package-lock.json , ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ package-lock.json ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ установки ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ вСрсиями.
Если Π²Ρ‹ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Π·Π° Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ package.json , ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ - ΠžΡΠ½ΠΎΠ²Ρ‹ Package.json.

Как package-lock.json управляСт Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ зависимостСй

ΠΏΠ°ΠΊΠ΅Ρ‚-Π·Π°ΠΌΠΎΠΊ.json - это Ρ„Π°ΠΉΠ», созданный npm (начиная с v5 2017), ΠΈ ΠΎΠ½ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ зависимости ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ΠΈΡ… ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ зависимости.
Он отслСТиваСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ зависимости Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈ связанныС с Π½ΠΈΠΌΠΈ вСрсии. Π—Π²ΡƒΡ‡ΠΈΡ‚ просто, ΠΏΡ€Π°Π²Π΄Π°? Π₯отя каТдая ΠΈΠ· этих зависимостСй Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свои собствСнныС зависимости, ΠΈ каТдая ΠΈΠ· Π½ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свои собствСнныС зависимости ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.
Π­Ρ‚Π° взаимосвязь ΠΌΠ΅ΠΆΠ΄Ρƒ всСми зависимостями ΠΈ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹ΠΌΠΈ зависимостями Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ называСтся Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ зависимостСй .
Π”Π΅Ρ€Π΅Π²ΠΎ зависимостСй прСдставляСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ зависит наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ.

πŸ’°
НачнитС своС ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ΅ ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ с
100 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² БША Π² Π²ΠΈΠ΄Π΅ бСсплатных ΠΊΡ€Π΅Π΄ΠΈΡ‚ΠΎΠ²

с участиСм
DigitalOcean.

Установка зависимости с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ npm фактичСски ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости ΠΈ устанавливаСт ΠΈΡ… Π² ΠΏΠ°ΠΏΠΊΡƒ node_modules / .
Π€Π°ΠΉΠ» package-lock.json - это снимок всСго нашСго Π΄Π΅Ρ€Π΅Π²Π° зависимостСй ΠΈ вся информация, нСобходимая npm для воссоздания состояния ΠΏΠ°ΠΏΠΊΠΈ node_modules / .
ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли присутствуСт Ρ„Π°ΠΉΠ» package-lock.json , npm install установит Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ вСрсии.

package-lock.json Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для чтСния Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для рСдактирования Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.
Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки npm Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ управляСт ΠΈΠΌ автоматичСски.

Π’Ρ€Π΅ΠΊ package-lock.json

Π€Π°ΠΉΠ» package-lock.json Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² систСму управлСния вСрсиями (GIT), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй.
ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ фиксации Ρ„Π°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° для управлСния вСрсиями Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² отслСТивании состояния ΠΏΠ°ΠΏΠΊΠΈ node_modules /
Π±Π΅Π· нСобходимости ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ саму ΠΏΠ°ΠΏΠΊΡƒ Π² систСму контроля вСрсий. Никогда Π½Π΅ фиксируйтС ΠΏΠ°ΠΏΠΊΡƒ ΡƒΠ·Π»ΠΎΠ²-ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.
Он Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для фиксации, ΠΎΠ½ слишком большой, ΠΈ Π΅Π³ΠΎ состояниС ΡƒΠΆΠ΅ отслСТиваСтся.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ запускаСм ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ npm, которая измСняСт зависимости, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ npm install ΠΈΠ»ΠΈ npm uninstall ΠΈΠ»ΠΈ npm update ΠΈΠ»ΠΈ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΡƒΡŽ зависимости,
Ρ„Π°ΠΉΠ» package-lock.json Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒ состояниС Π΄Π΅Ρ€Π΅Π²Π° зависимостСй.

тСрмоусадочная ΠΏΠ»Π΅Π½ΠΊΠ°, Π½ΠΏΠΌ

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° зависимостСй - Π½Π΅ новая концСпция Π² Node.js ΠΈΠ»ΠΈ Π² ΠΌΠΈΡ€Π΅ программирования. Π€Π°ΠΉΠ» package-lock Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ npm-shrinkwrap.json , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Π΄ΠΎ npm v5.
ЕдинствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ package-lock.json игнорируСтся npm ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² рССстрС NPM. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои зависимости, ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ npm-shrinkwrap.json .
Π£ вас Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Если ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ±Π° npm-shrinkwrap ΠΈΠΌΠ΅Π΅Ρ‚ прСимущСство.Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования npm-shrinkwrap.json - это прилоТСния, Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Π² процСссС ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² рССстрС NPM.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» npm-shrinkwrap, запуститС npm shrinkwrap . Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ваш package-lock Π² npm-shrinkwrap . Π€Π°ΠΉΠ»Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅.
npm-shrinkwrap слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² рССстр NPM.

TL; DR

  • package-lock.json - это снимок всСго Π΄Π΅Ρ€Π΅Π²Π° зависимостСй (всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, всС зависимости.всС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° вСрсий)
  • Π­Ρ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Π΄Ρ€Π΅ΠΉΡ„Π° зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ установками.
  • package-lock.json обновляСтся автоматичСски ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ зависимостСй.
  • Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ привязан ΠΊ систСмС контроля вСрсий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ зависимости ΠΏΡ€ΠΈ установкС.

Бпасибо Π·Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΈ Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ вопросов , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ comment ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΌΠ½Π΅ сообщСниС @mariokandut .

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΠ± ΡƒΠ·Π»Π΅ Node , ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с этими руководствами ΠΏΠΎ ΡƒΠ·Π»Π°ΠΌ.

Бсылки (ΠΈ большоС спасибо):

NPM package-lock, NPM shrinkwrap, Node, HeyNode

package-lock.json vs package.json: Но Ρ‡Ρ‚ΠΎ Π·Π° Ρ‡Π΅Ρ€Ρ‚ package-lock.json?

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π°, я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎ, вСроятно, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² package-lock.json !!

package-lock.json - Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π²Π°ΠΆΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ спасти вас ΠΎΡ‚ большого количСства boom boom bam bam πŸ”₯ Π² Π²Π°ΡˆΠΈΡ… рСпозиториях.

Π˜Ρ‚Π°ΠΊ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².json ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ сСмантичСском ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ вСрсиями ΠΈ package.json.

Semantic versioning ΠΈΠ»ΠΈ SemVer - ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ способ управлСния вСрсиями ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ 1.4.5 (major.minor.patch)

1Π°. Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ошибки / вСрсия ΠΏΠ°Ρ‚Ρ‡Π°

Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ исправлСния ошибок / орфографичСскиС ошибки Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Ρ‚. Π”.

1Π±. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ вСрсия

Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя добавлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΈΠ· старых вСрсий. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ всС, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° v1.1.0 Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ с вСрсиСй 1.9.0.

1с. Основная вСрсия

Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ, которая ломаСтся. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ API ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, поэтому всС, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° v1.0.0, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° v2.0.0

package.json - это Ρ„Π°ΠΉΠ», содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ (имя, Π²Π΅Ρ€ΡΠΈΡŽ ΠΈ Ρ‚. Π”.), И Π² Π½Π΅ΠΌ пСрСчислСны ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… зависит ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π²Ρ‹ΡˆΠ΅, послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ зависимости, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² package. ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ Π΄ΠΎ послСднСй вСрсии ΠΏΠ°Ρ‚Ρ‡Π°)

Однако это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ младшСй вСрсии, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅ вашСго прилоТСния.

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠ·ΠΆΠ΅ npm выпустил Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ package-lock.json, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… сцСнариСв.

package-lock.json просто ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ этого ΠΎΠ±Ρ‰Π΅Π³ΠΎ повСдСния установки ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ младшСй вСрсии, поэтому, ΠΊΠΎΠ³Π΄Π° ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ вашС Ρ€Π΅ΠΏΠΎ ΠΈ запускаСт npm install Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. NPM рассмотрит Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². ΠΈ ~ ΠΈΠ· package.json.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ содСрТит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая экономит врСмя Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ этих Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· npm Π²ΠΎ врСмя установки npm.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ package-lock.json ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π±Π»ΠΎΠ³Π΅ npm.

Бпасибо, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ это!

НадСюсь, это Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ πŸŽ‰ πŸ™‚

Π Π•Π”ΠΠšΠ’Π˜Π ΠžΠ’ΠΠ’Π¬: Π˜Ρ‚Π°ΠΊ, читая ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, я ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ измСняСтся package-lock.json, поэтому Π²ΠΎΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· написанных ΠΌΠ½ΠΎΠΉ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, я Π΄ΡƒΠΌΠ°ΡŽ, всСм слСдуСт ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π·

EDIT2: Π¦ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· коммСнтария ΠšΡΡ‚ ΠœΠ°Ρ€Ρ‡Π°Π½
(https: // dev.to / zkat / comment / epbj) Π­Ρ‚ΠΎ ΠΎΠ½Π° написала npm ci ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° package-lock.json Π² NPM

УстранСниС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π² package-lock.json | Π‘Π»ΠΎΠ³ TkDodo


Π― Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² git, сколько сСйчас.

Π­Ρ‚ΠΎ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ΠΎ ошибкам. Π­Ρ‚ΠΎ просто Π½Π΅ вСсСло.

Одна Π²Π΅Ρ‰ΡŒ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΠΈΡ‚ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΠΎ, Ссли сдСлана Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, — это Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π² сгСнСрированных Ρ„Π°ΠΉΠ»Π°Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ package-lock.json.
ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это происходит, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π΅ Π²Π΅Ρ‚ΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ.Π—Π°Ρ‚Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° мСняСтся, ΠΈ Ρ‚ΠΎΡ‚, ΠΊΡ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ свой PR с основным, Ρ‚ΠΎΡ‚ счастливчик, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·Π±Π΅ΠΆΠ°Π» этих ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ².
Π­Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΊ Π³ΠΎΠ½ΠΊΠ°.

Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ обновляСтС свой PR с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, ΠΈ git ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π°ΠΌ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π² package-lock.json.
ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π² package.json ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ (Ссли ΠΎΠ½ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π΅ΡΡ‚ΡŒ), поэтому я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΌΠ°Π½Ρ‡ΠΈΠ²ΠΎ просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ package-lock.json ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ npm install .
Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², это даст Π²Π°ΠΌ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².4.2.1 ΠΊΠ°ΠΊ вСрсия,
ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΎΡ‚ 4.2.1 Π΄ΠΎ 4.17.20 (послСдняя вСрсия)

Π’ΠΎΡ‚ здСсь-Ρ‚ΠΎ ΠΈ вступаСт Π² ΠΈΠ³Ρ€Ρƒ package-lock.json. ПослС установки ΠΎΠ½ «Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚» вас Π½Π° Ρ‚ΠΎΠΉ вСрсии, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ установили.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли 4.2.1 являСтся послСднСй вСрсиСй Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ вашСй установки, эта вСрсия Π±ΡƒΠ΄Π΅Ρ‚ записана Π² package-lock ΠΈ с этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ.
Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ΠΉΠ΄ΡƒΡ‚ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Π΅ вСрсии, тСорСтичСски совмСстимыС с Π½ΠΈΠΌ.

Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ вСрсия Π½Π° своСй машинС, ΠΈ это ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π²Π°ΠΆΠ½ΠΎ для CI / CD.
Π― Π±Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π» Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² производство Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ , Ρ‡Π΅ΠΌ ΠΌΡ‹ тСстировали, Π΄Π°ΠΆΠ΅ Ссли это всСго лишь ΠΏΠ°Ρ‚Ρ‡.

Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ удаляСтС package-lock.json, вся эта ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ исчСзаСт.
ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ node_module, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ зависитС, Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ Π΄ΠΎ послСднСй вСрсии, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ тСорСтичСски совмСстим.
Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π±Π΅Π· ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΌΠ΅Π»ΠΎΡ‡Π΅ΠΉ ΠΈ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ.Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ это ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  1. Он ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС строго ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ сСмантичСского управлСния вСрсиями, ΠΈ я искрСннС сомнСваюсь, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊ. Π’Π°ΠΊΠΆΠ΅ Π½Π΅Ρ‚ возмоТности Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого.
  2. Основная нулСвая вСрсия освобоТдСна ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ» сСмантичСского управлСния вСрсиями. Из спСцификации semver:

    Основная нулСвая вСрсия (0.y.z) ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ВсС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ Π² любоС врСмя. ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ API НЕ Π‘Π›Π•Π”Π£Π•Π’ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ.

ВзглянитС Π½Π° свой ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ Π·Π°ΠΌΠΎΠΊ.), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π²Π°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ — Π½Π΅Ρ‚.

Если Π²Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ package-lock.json сСйчас ΠΈΠ· любого ΠΈΠ· своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ снова запуститС npm install , ΠΎΠ½ навСрняка Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΈΠ½Π°Ρ‡Π΅.

Π‘ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² порядкС? ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅Ρ‚. Никто Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ.
Для мСня это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚: «рСгрСссионная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° всСго», Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я имСю Π² Π²ΠΈΠ΄Ρƒ, ΠΊΠΎΠ³Π΄Π° просто Ρ€Π΅ΡˆΠ°ΡŽ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚.

Π§Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ вмСсто этого

Мой ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±Ρ‹Π» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

  • Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅.json
  • Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ package-lock.json ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ
  • снова запуститС npm install

Π­Ρ‚ΠΎ просто пСрСустановит всС измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ внСсли Π² Π½Π°ΡˆΡƒ Π²Π΅Ρ‚ΠΊΡƒ.
Однако Π½Π΅Π΄Π°Π²Π½ΠΎ я ΡƒΠ·Π½Π°Π» ΠΎ Π±ΠΎΠ»Π΅Π΅ простом способС:

npm ΠΌΠΎΠΆΠ΅Ρ‚ автоматичСски ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π² package-lock.json ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΈΡ… Π·Π° нас.
Из Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ npm:

Иногда Π΄Π²Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ установки npm ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ слияния Π² систСмах управлСния вСрсиями. По ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π½Π° npm @ 5.

Category Js

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *