πŸ“¦ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ npm? Π“Π°ΠΉΠ΄ ΠΏΠΎ Node Package Manager для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ JavaScript-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π° ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ npm – ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Node.js.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Node.js появилась Π² 2009 Π³., ΠΈ с Ρ‚Π΅Ρ… ΠΏΠΎΡ€ Π½Π° Π½Π΅ΠΉ Π±Ρ‹Π»ΠΈ построСны сотни тысяч ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Одной ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ успСха стал npm – популярный ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ JS-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ быстро Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ.

На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания ΡΡ‚Π°Ρ‚ΡŒΠΈ Π² npm содСрТится 1.3 ΠΌΠ»Π½ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с ΠΎΠ±Ρ‰ΠΈΠΌ количСством скачиваний 16 ΠΌΠ»Ρ€Π΄.

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ npm?

npm (Node Package Manager) – Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ для JavaScript, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Node.js. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ npm состоит ΠΈΠ· Π΄Π²ΡƒΡ… частСй:

  • CLI (интСрфСйс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки) – срСдство для размСщСния ΠΈ скачивания ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²,
  • ΠΎΠ½Π»Π°ΠΉΠ½-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, содСрТащиС JS ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ рСпозитория npmjs.com ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ†Π΅Π½Ρ‚Ρ€ исполнСния Π·Π°ΠΊΠ°Π·ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ (npm-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹) ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†ΠΎΠ² (Π°Π²Ρ‚ΠΎΡ€Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²) ΠΈ распространяСт эти Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ срСди ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»Π΅ΠΉ (ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²).

Π’ Ρ†Π΅Π½Ρ‚Ρ€Π΅ исполнСния Π·Π°ΠΊΠ°Π·ΠΎΠ² (npmjs.com) Π² качСствС ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ покупатСля Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ армия Π²ΠΎΠΌΠ±Π°Ρ‚ΠΎΠ² (npm CLI).

Зависимости ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Рис. 1).

Рис. 1. ΠŸΡ€ΠΎΡ†Π΅ΡΡ установки ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· npm install

ΠŸΡ€ΠΎΡ†Π΅ΡΡ размСщСния ΠΏΠ°ΠΊΠ΅Ρ‚Π° выглядит, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Рис. 2.

Рис. 2. ΠŸΡ€ΠΎΡ†Π΅ΡΡ размСщСния ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· npm publish

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ рассмотрим Ρ€Π°Π±ΠΎΡ‚Ρƒ Π²ΠΎΠΌΠ±Π°Ρ‚ΠΎΠ².

1.1. Π€Π°ΠΉΠ» package.json

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² JavaScript – Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ Node.js ΠΈΠ»ΠΈ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ – ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скопирован ΠΊΠ°ΠΊ npm-ΠΏΠ°ΠΊΠ΅Ρ‚ с собствСнным описаниСм ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠΌ package.json.

package.json ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ стикСры (список ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½ΡƒΠΆΠ½Ρ‹Ρ… вСрсий) Π½Π° npm-ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ΅ (ΠΏΡ€ΠΎΠ΅ΠΊΡ‚). Π€Π°ΠΉΠ» гСнСрируСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ npm init ΠΏΡ€ΠΈ создании JavaScript/Node.js ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:

  • name: Π½Π°Π·Π²Π°Π½ΠΈΠ΅ JS Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ/ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
  • version: вСрсия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
  • description: описаниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
  • license: лицСнзия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

1.2. Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ npm

Π’ package.json Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅ scripts для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ сборки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

{
  "scripts": {
    "build": "tsc",
    "format": "prettier --write **/*.ts",
    "format-check": "prettier --check **/*.ts",
    "lint": "eslint src/**/*.ts",
    "pack": "ncc build",
    "test": "jest",
    "all": "npm run build && npm run format && npm run lint && npm run pack && npm test"
  }
}

eslint, prettier, ncc, jest ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ установлСны глобально ΠΈΠ»ΠΈ локально для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ node_modules/.bin/.

1.3. dependencies ΠΈ devDependencies

dependencies ΠΈ devdependencies ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой словари с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ npm-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (ΠΊΠ»ΡŽΡ‡) ΠΈ ΠΈΡ… сСмантичСскиС вСрсии (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· шаблона TypeScript Action:

{
  "dependencies": {
    "@actions/core": "^1.2.3",
    "@actions/github": "^2.1.1"
  },
  "devDependencies": {
    "@types/jest": "^25.1.4",
    "@types/node": "^13.9.0",
    "@typescript-eslint/parser": "^2.22.0",
    "@zeit/ncc": "^0.21.1",
    "eslint": "^6.8.0",
    "eslint-plugin-github": "^3.4.1",
    "eslint-plugin-jest": "^23.8.2",
    "jest": "^25.1.0",
    "jest-circus": "^25.1.0",
    "js-yaml": "^3.13.1",
    "prettier": "^1.19.1",
    "ts-jest": "^25.2.1",
    "typescript": "^3.8.3"
  }
}

Π­Ρ‚ΠΈ зависимости ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ npm install с Ρ„Π»Π°Π³Π°ΠΌΠΈ --save ΠΈ --save-dev. Они ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ соотвСтствСнно для использования Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

О вСрсионировании:

  • ^: послСдний ΠΌΠΈΠ½ΠΎΡ€Π½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ·. НапримСр, ^1.0.4 установит Π²Π΅Ρ€ΡΠΈΡŽ 1.3.0, Ссли это послСдний ΠΌΠΈΠ½ΠΎΡ€Π½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· Π² сСрии 1 ΠΌΠ°ΠΆΠΎΡ€Π½ΠΎΠ³ΠΎ Ρ€Π΅Π»ΠΈΠ·Π°.
  • ~: послСдний ΠΏΠ°Ρ‚Ρ‡-Ρ€Π΅Π»ΠΈΠ·. ~1.0.4 установит 1.0.7, Ссли эта послСдняя минорная вСрсия Π² сСрии ΠΌΠΈΠ½ΠΎΡ€Π½Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² 1.0.

ВсС вСрсии ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² сгСнСрированном Ρ„Π°ΠΉΠ»Π΅ package-lock.json.

1.4. Π€Π°ΠΉΠ» package-lock.json

Π€Π°ΠΉΠ» package-lock.json описываСт вСрсии ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² JavaScript-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Если package.json Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π΅ описаниС зависимостСй (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π°), Ρ‚ΠΎ package-lock.json Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ – всё Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй.

package-lock.json гСнСрируСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ npm install ΠΈ читаСтся npm CLI, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ воспроизвСдСниС окруТСния для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· npm ci.

2. Установка ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Ρ‡Π°Ρ‰Π΅ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ (16 ΠΌΠ»Ρ€Π΄ скачиваний ΠΏΡ€ΠΎΡ‚ΠΈΠ² 13 ΠΌΠ»Π½ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ), Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ ΠΈΡ… ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ.

2.1. npm install

npm install – ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ npm install <package-name> со Π·Π½Π°ΠΊΠΎΠΌ ^ установит послСднюю Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. npm install скачаСт ΠΏΠ°ΠΊΠ΅Ρ‚ Π² ΠΏΠ°ΠΏΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° node_modules Π² соотвСтствии с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ Π² Ρ„Π°ΠΉΠ»Π΅ package.json, ΠΎΠ±Π½ΠΎΠ²ΠΈΠ² Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (ΠΈ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠ±Π½ΠΎΠ²ΠΈΠ² package-lock.json). ΠŸΡ€ΠΈ нСобходимости установки ΠΏΠ°ΠΊΠ΅Ρ‚Π° глобально ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ -g .

npm сдСлал установку ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² JavaScript Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ простой, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈ Π² сообщСствС Ρ€Π°Π·Ρ€Π°Π±ΠΎΠ² появились ΠΌΠ΅ΠΌΡ‹ Π½Π° эту Ρ‚Π΅ΠΌΡƒ:

Рис. 3. МСм ΠΏΡ€ΠΎ node_modules

ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Ρ„Π»Π°Π³Π° --production установятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½Ρ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния зависимости ΠΈΠ· dependencies, Π½Π΅ раздувая node_modules.

2.2. npm ci

Если npm install --production ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π΅Π½ для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°, сущСствуСт Π»ΠΈ аналогичная ΠΊΠΎΠΌΠ°Π½Π΄Π° для локальной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ? Π”Π°, ΠΎΠ½Π° называСтся npm ci.

Как ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, Ссли package-lock.json Π΅Ρ‰Π΅ Π½Π΅ сущСствуСт Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрирован ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ npm install. npm ci обращаСтся ΠΊ Lock-Ρ„Π°ΠΉΠ»Ρƒ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ вСрсии ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… Π½Π°Π±ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² останСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

2.3. npm audit

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ добавлСния Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ врСдоносных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², организация npm.js ΠΏΡ€ΠΈΡˆΠ»Π° ΠΊ ΠΈΠ΄Π΅Π΅ Π°ΡƒΠ΄ΠΈΡ‚Π° экосистСмы, создав ΠΌΠΎΠ΄ΡƒΠ»ΡŒ npm audit. Он прСдоставляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± уязвимостях Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… ΠΈ ΠΎ сущСствовании вСрсий с исправлСниями.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π°ΡƒΠ΄ΠΈΡ‚Π° для ΠΏΠ°ΠΊΠ΅Ρ‚Π° static-eval

Если исправлСния доступны Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсиях ΠΏΠ°ΠΊΠ΅Ρ‚Π°, npm audit fix автоматичСски ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ вСрсии Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹Ρ… зависимостСй.

3. Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΎΡ‚ потрСблСния ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΊ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ.

3.1. npm publish

ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Π² npmjs.com ΠΎΡ‡Π΅Π½ΡŒ просто – Π½ΡƒΠΆΠ½ΠΎ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ Π² консоли npm publish. ВаТная Ρ‡Π°ΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π°ΡŽΡ‚ Π°Π²Ρ‚ΠΎΡ€Ρ‹ – вСрсионированиС. Π’ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ эмпиричСскиС ΠΏΡ€Π°Π²ΠΈΠ» semver.org, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…, ΠΊΠΎΠ³Π΄Π° слСдуСт ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ вСрсии:

  • ΠœΠ°ΠΆΠΎΡ€Π½Π°Ρ вСрсия: ΠΊΠΎΠ³Π΄Π° сдСланы ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ нСсовмСстимыС измСнСния API.
  • ΠœΠΈΠ½ΠΎΡ€Π½Π°Ρ вСрсия: ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ добавляСтС Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Ρ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.
  • ΠŸΠ°Ρ‚Ρ‡-вСрсия: ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ совмСстимыС исправлСния.

Π•Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ собствСнных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚Π΅ Ρ‡ΡŒΡŽ-Π»ΠΈΠ±ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² npm бСрСтся вСрсия ^ (ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ младшая вСрсия).

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

Π’ этой ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΡ‹ познакомились со структурой npm ΠΈ ΡƒΠ·Π½Π°Π»ΠΈ:

  • Π² ΠΊΠ°ΠΊΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ… хранятся Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ зависимостях (package.json, package-lock.json).
  • ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½ (npm install), Π½Π° локальной машинС (npm ci) ΠΈ провСсти Π°ΡƒΠ΄ΠΈΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² (npm audit).
  • ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ (npm publish).
***

МнС Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π²ΠΎ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄. Какой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ самый быстрый ΠΈ качСствСнный?

Если 15 Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ сСбя Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ достаточно Π±Ρ‹Π»ΠΎ Π·Π½Π°Ρ‚ΡŒ HTML, CSS ΠΈ JavaScript, Ρ‚ΠΎ сСйчас Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ отстаСт ΠΎΡ‚ бэкСнд-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎ количСству Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΠΈ слоТности стСков. Π‘Π°ΠΌΡ‹ΠΉ быстрый ΠΈ качСствСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ знания ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Ρ€ΡƒΠΊ ΠΎΡ‚ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»Π΅ΠΉ со стаТСм. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ запустили курс Β«Frontend Basic: ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ соврСмСнного Π²Π΅Π±Π°Β», Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹:

  • освоитС стСк Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² любой ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π½Π° любом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅;
  • свСрстаСтС свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ°ΠΊΠ΅Ρ‚ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ сСмантики ΠΈ мноТСства Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… элСмСнтов Π½Π° HTML ΠΈ CSS;
  • ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ интСрфСйсы;
  • Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ΡΡŒ, ΠΊΠ°ΠΊ JavaScript ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с backend ΠΈ создадитС свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ сСрвСром;
  • ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚Π΅ΡΡŒ Π² Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½Π° React.js ΠΈ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ свой ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½;
  • ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ основныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с GIT, ваТнСйшСго инструмСнта для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² любой ΠΊΠΎΠΌΠ°Π½Π΄Π΅.

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

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

admin
10 июня 2018

Π›Π°ΠΉΡ„Ρ…Π°ΠΊ: Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ JavaScript

ΠžΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ инструмСнтарий JS ΠΈ Ρ‚ΠΎΠ½Π½Ρ‹ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² ΠΏΠΎ Π½Π΅ΠΌΡƒ. Π‘ Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ? Расск...
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
24 сСнтября 2017

6 сСрвисов для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π»ΠΎΠΊ-схСмами

Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈ быстрСС Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°...