339 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			339 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: NPM
							 | 
						|||
| 
								 | 
							
								localeTitle: NPM
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								## NPM
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Node.js позволяет писать приложения в JavaScript на сервере. Он построен на среде исполнения V8 JavaScript и написан на C ++ - так что это быстро. Первоначально он был предназначен как серверная среда для приложений, но разработчики начали использовать его для создания модулей, чтобы помочь им в локальной автоматизации задач. С тех пор вся новая экосистема инструментов, основанных на узлах, эволюционировала, чтобы трансформировать лицо переднего плана.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Чтобы использовать эти модули (или пакеты) в Node.js, мы должны иметь возможность устанавливать и управлять ими полезным способом. Здесь приходит npm, менеджер пакетов Node. Он устанавливает пакеты, которые вы хотите использовать, и предоставляет полезный интерфейс для работы с ними.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## Установка NPM
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Чтобы установить `npm` мы должны загружать двоичные файлы Nodejs в вашем локальном envrionment. В двоичные файлы Node.js включена последняя версия npm. Чтобы убедиться, что:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								npm -v 
							 | 
						|||
| 
								 | 
							
								 5.6.0 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Node Package Manager (NPM) предоставляет две основные функции:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								*   Интернет-хранилища для пакетов / модулей node.js, которые можно найти на `npmjs.com` .
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   Утилита командной строки для установки пакетов Node.js, управления версиями и управления зависимостями пакетов Node.js.
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## Установка модулей с использованием NPM
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								`npm` может устанавливать пакеты в локальном или глобальном режиме. По умолчанию NPM устанавливает любую зависимость в локальном режиме. В локальном режиме он устанавливает пакет в папку node\_modules в родительском рабочем каталоге. Это место принадлежит текущему пользователю. Глобальные пакеты устанавливаются в {prefix} `/lib/node_modules/` который принадлежит root, где {prefix} обычно `/usr/ or /usr/local` . Это означает, что вам придется использовать sudo для установки пакетов по всему миру, что может привести к ошибкам при разрешении сторонних зависимостей, а также к проблемам безопасности.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Установка пакетов в глобальном режиме
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Любые пакеты, установленные во всем мире, станут доступны из командной строки. Мы используем флаг -global или -g для установки пакетов по всему миру.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								$ npm install uglify-js --global 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Мы можем перечислить глобальные пакеты, которые мы установили, с командой списка npm.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								$ npm list --global 
							 | 
						|||
| 
								 | 
							
								 /usr/local/lib 
							 | 
						|||
| 
								 | 
							
								 ├─┬ npm@5.6.0 
							 | 
						|||
| 
								 | 
							
								 │ ├── abbrev@1.1.0 
							 | 
						|||
| 
								 | 
							
								 │ ├── ansi-regex@2.1.1 
							 | 
						|||
| 
								 | 
							
								 │ ├── ansicolors@0.3.2 
							 | 
						|||
| 
								 | 
							
								 │ ├── ansistyles@0.1.3 
							 | 
						|||
| 
								 | 
							
								 .................... 
							 | 
						|||
| 
								 | 
							
								 └─┬ uglify-js@3.0.15 
							 | 
						|||
| 
								 | 
							
								  ├─┬ commander@2.9.0 
							 | 
						|||
| 
								 | 
							
								  │ └── graceful-readlink@1.0.1 
							 | 
						|||
| 
								 | 
							
								  └── source-map@0.5.6 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Однако вывод является довольно подробным. Мы можем изменить это с помощью опции --depth = 0.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```js
							 | 
						|||
| 
								 | 
							
								$ npm list -g --depth=0 
							 | 
						|||
| 
								 | 
							
								 /usr/local/lib 
							 | 
						|||
| 
								 | 
							
								 ├── npm@5.6.0 
							 | 
						|||
| 
								 | 
							
								 └── uglify-js@3.0.15 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Установка пакетов в локальном режиме
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Когда вы устанавливаете пакеты локально, вы обычно делаете это с помощью файла package.json.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								npm install --save express 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Теперь вы можете использовать этот модуль в своем js-файле, как показано ниже.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```js
							 | 
						|||
| 
								 | 
							
								const express = require('express'); 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Локальные модули далее делятся на два типа зависимостей: `devDepenednecies` и `dependencies` . Разница между этими двумя заключается в том, что devDependencies - это модули, которые необходимы только во время разработки, а зависимости - это модули, которые также требуются во время выполнения. Чтобы сохранить зависимость как devDependency при установке, нам нужно сделать `npm install --save-dev` , а не только `npm install --save` .
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Хорошая стенограмма для установки devDependency, которую я люблю использовать, - `npm i -D` . Сокращение для сохранения регулярной зависимости - это `-S` вместо `-D` .
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Установка конкретной версии пакета
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Для этого укажем версию пакета, которую мы хотим установить.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								$ npm install underscore@1.8.2 -S 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Чтобы удалить глобальную зависимость, используйте флаг `-g` .
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Удаление локальных пакетов
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								npm - менеджер пакетов, поэтому он должен иметь возможность удалить пакет. Мы можем удалить пакет:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								$ npm uninstall underscore -S 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Чтобы обновить глобальную зависимость, используйте флаг `-g` .
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Обновление пакета
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Чтобы обновить пакет, вы можете:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								$ npm update underscore -S 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Чтобы проверить, доступно ли обновление для любого пакета, связанного с нашим проектом:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								$ npm outdated 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 Package     Current  Wanted  Latest  Location 
							 | 
						|||
| 
								 | 
							
								 underscore    1.8.2   1.8.3   1.8.3  project 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Текущий столбец показывает нам версию, установленную локально. Последняя колонка сообщает нам последнюю версию пакета. И столбец Wanted сообщает нам последнюю версию пакета, которую мы можем обновить, не нарушая существующий код.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## Управление зависимостями с помощью package.json
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Если не использовать определенный флаг и установить модуль, например, `npm install express` будет устанавливать модуль в папке `node_modules` локально, но `package.json` который ведет записи обо всех зависимостях, которые мы используем в проекте, не будет обновляться с нашим добавлением. Таким образом, пакет будет специфичным для разработки, он не будет установлен в среде runtimme. Убедитесь, что вы всегда используете правильный флаг и сохраняете файл `package.json` .
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Когда вы устанавливаете пакеты локально, вам нужен файл package.json. Для его создания вы можете сделать это, используя команду `npm init` . Это вызовет некоторые вопросы, которые, нажав enter, вы можете сохранить значения по умолчанию.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								$ npm init 
							 | 
						|||
| 
								 | 
							
								 package name: (project) 
							 | 
						|||
| 
								 | 
							
								 version: (1.0.0) 
							 | 
						|||
| 
								 | 
							
								 description: Demo of package.json 
							 | 
						|||
| 
								 | 
							
								 entry point: (index.js) 
							 | 
						|||
| 
								 | 
							
								 test command: 
							 | 
						|||
| 
								 | 
							
								 git repository: 
							 | 
						|||
| 
								 | 
							
								 keywords: 
							 | 
						|||
| 
								 | 
							
								 author: 
							 | 
						|||
| 
								 | 
							
								 license: (ISC) 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Подумайте, что `package.json` является хранителем всех зависимостей или проявлением проекта Node.js. Если вам нужен более быстрый способ сгенерировать файл package.json, используйте `npm init --y` .
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Список общих атрибутов в файле `package.json` :
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								*   name - имя пакета
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   версия - семантическая версия пакета
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   описание - описание пакета
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   домашняя страница - домашняя страница пакета
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   автор - автор пакета
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   вкладчики - имя вкладчиков в пакет
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   dependencies - список зависимостей. NPM автоматически устанавливает все зависимости, указанные здесь, в папке node\_module пакета.
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   devDependencies - список всех зависимостей, зависящих от разработки
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   репозиторий - тип репозитория и URL-адрес пакета
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   главная - точка входа пакета
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   ключевые слова - ключевые слова
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   лицензия - лицензия на ваш пакет, чтобы люди знали, как им разрешено использовать его, и любые ограничения, которые вы устанавливаете на него.
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   scripts - Свойство «scripts» - это словарь, содержащий команды скриптов, которые выполняются в разное время на жизненном цикле вашего пакета.
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								*   config - объект, который можно использовать для установки параметров конфигурации, используемых в сценариях пакета, которые сохраняются при обновлении.
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Пример:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```json
							 | 
						|||
| 
								 | 
							
								{ 
							 | 
						|||
| 
								 | 
							
								   "name": "express", 
							 | 
						|||
| 
								 | 
							
								      "description": "Fast, unopinionated, minimalist web framework", 
							 | 
						|||
| 
								 | 
							
								      "version": "4.11.2", 
							 | 
						|||
| 
								 | 
							
								      "author": { 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								         "name": "TJ Holowaychuk", 
							 | 
						|||
| 
								 | 
							
								         "email": "tj@vision-media.ca" 
							 | 
						|||
| 
								 | 
							
								      }, 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								   "contributors": [{ 
							 | 
						|||
| 
								 | 
							
								      "name": "Aaron Heckmann", 
							 | 
						|||
| 
								 | 
							
								      "email": "aaron.heckmann+github@gmail.com" 
							 | 
						|||
| 
								 | 
							
								   }, 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								    ], 
							 | 
						|||
| 
								 | 
							
								   "license": "MIT", "repository": { 
							 | 
						|||
| 
								 | 
							
								      "type": "git", 
							 | 
						|||
| 
								 | 
							
								      "url": "https://github.com/strongloop/express" 
							 | 
						|||
| 
								 | 
							
								   }, 
							 | 
						|||
| 
								 | 
							
								   "homepage": "https://expressjs.com/", "keywords": [ 
							 | 
						|||
| 
								 | 
							
								      "express", 
							 | 
						|||
| 
								 | 
							
								      "framework", 
							 | 
						|||
| 
								 | 
							
								      "sinatra", 
							 | 
						|||
| 
								 | 
							
								      "web", 
							 | 
						|||
| 
								 | 
							
								      "rest", 
							 | 
						|||
| 
								 | 
							
								      "restful", 
							 | 
						|||
| 
								 | 
							
								      "router", 
							 | 
						|||
| 
								 | 
							
								      "app", 
							 | 
						|||
| 
								 | 
							
								      "api" 
							 | 
						|||
| 
								 | 
							
								   ], 
							 | 
						|||
| 
								 | 
							
								   "dependencies": { 
							 | 
						|||
| 
								 | 
							
								      "serve-static": "~1.8.1", 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								   }, 
							 | 
						|||
| 
								 | 
							
								   "devDependencies": { 
							 | 
						|||
| 
								 | 
							
								      "jade": "~1.9.1", 
							 | 
						|||
| 
								 | 
							
								   }, 
							 | 
						|||
| 
								 | 
							
								   "engines": { 
							 | 
						|||
| 
								 | 
							
								      "node": ">= 0.10.0" 
							 | 
						|||
| 
								 | 
							
								   }, 
							 | 
						|||
| 
								 | 
							
								   "files": [ 
							 | 
						|||
| 
								 | 
							
								      "LICENSE", 
							 | 
						|||
| 
								 | 
							
								      "History.md", 
							 | 
						|||
| 
								 | 
							
								      "Readme.md", 
							 | 
						|||
| 
								 | 
							
								      "index.js", 
							 | 
						|||
| 
								 | 
							
								      "lib/" 
							 | 
						|||
| 
								 | 
							
								   ], 
							 | 
						|||
| 
								 | 
							
								   "scripts": { 
							 | 
						|||
| 
								 | 
							
								      "test": "mocha --require test/support/env 
							 | 
						|||
| 
								 | 
							
								         --reporter spec --bail --check-leaks test/ test/acceptance/", 
							 | 
						|||
| 
								 | 
							
								      "test-cov": "istanbul cover node_modules/mocha/bin/_mocha 
							 | 
						|||
| 
								 | 
							
								         -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/", 
							 | 
						|||
| 
								 | 
							
								      "test-tap": "mocha --require test/support/env 
							 | 
						|||
| 
								 | 
							
								         --reporter tap --check-leaks test/ test/acceptance/", 
							 | 
						|||
| 
								 | 
							
								      "test-travis": "istanbul cover node_modules/mocha/bin/_mocha 
							 | 
						|||
| 
								 | 
							
								         --report lcovonly -- --require test/support/env 
							 | 
						|||
| 
								 | 
							
								         --reporter spec --check-leaks test/ test/acceptance/" 
							 | 
						|||
| 
								 | 
							
								   }, 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## Скрипты npm
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Скрипты `npm` используются для автоматизации повторяющихся задач. Например, создание вашего проекта, минимизация каскадных таблиц стилей (CSS) и JavaScript (JS). Сценарии также используются при удалении временных файлов и папок и т. Д. Они могут быть настроены и доступны через объект `scripts` в `package.json` .
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```json
							 | 
						|||
| 
								 | 
							
								{ 
							 | 
						|||
| 
								 | 
							
								  "name": "super-cool-package", 
							 | 
						|||
| 
								 | 
							
								  "version": "1.0.0", 
							 | 
						|||
| 
								 | 
							
								  "scripts": {} 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Пример наиболее популярного сценария NPM:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```json
							 | 
						|||
| 
								 | 
							
								"scripts": { 
							 | 
						|||
| 
								 | 
							
								    "start": "node index.js", 
							 | 
						|||
| 
								 | 
							
								    ... 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## npm Кэш
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Когда npm устанавливает пакет, он сохраняет копию, поэтому в следующий раз, когда вы захотите установить этот пакет, ему не нужно попадать в сеть. Копии хранятся в каталоге .npm в домашнем каталоге.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								$ ls ~/.npm 
							 | 
						|||
| 
								 | 
							
								 lodash.zipobject 
							 | 
						|||
| 
								 | 
							
								 log-driver 
							 | 
						|||
| 
								 | 
							
								 log-symbols 
							 | 
						|||
| 
								 | 
							
								 logalot 
							 | 
						|||
| 
								 | 
							
								 logfmt 
							 | 
						|||
| 
								 | 
							
								 loglevel 
							 | 
						|||
| 
								 | 
							
								 long-timeout 
							 | 
						|||
| 
								 | 
							
								 longest 
							 | 
						|||
| 
								 | 
							
								 longest-strea 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								С тех пор этот каталог будет загроможден старыми пакетами, поэтому иногда полезно его очищать.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								$ npm cache clean 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## Пряжа - альтернатива гамме
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Пряжа - также менеджер пакетов JavaScript, разработанный и поддерживаемый Facebook. Оба имеют общий уровень сходства, когда они приходят к их использованию. Предполагается, что он будет быстрее устанавливать зависимости, чем npm. Чтобы установить его:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								npm install -g yarn 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Пряжа не намеревается заменить npm, больше похоже на улучшение на нем. Он использует один и тот же файл package.json и сохраняет зависимости от папки `node_modules/` . Чтобы инициализировать projcet, вы будете использовать:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								yarn init 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Добавление, обновление и устранение зависимостей
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Добавление новой зависимости легко и похоже на npm:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								yarn add [package-name] 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Если вам нужна конкретная версия пакета или тег, вы можете это сделать.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								yarn add express@4.14.1 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Для зависимостей dev, одноранговых зависимостей и необязательных зависимостей вы передаете -dev -peer -optional соответственно.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								yarn add gulp --dev 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Будет экономить gulp под devDependencies. Чтобы обновить или удалить пакет, вы просто заменяете команду add либо обновлением, либо удалением, за которым следует имя пакета.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```shell
							 | 
						|||
| 
								 | 
							
								# upgrade a gulp from 3.9.1 to version 4 
							 | 
						|||
| 
								 | 
							
								 yarn upgrade gulp@4.0 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # remove a gulp 
							 | 
						|||
| 
								 | 
							
								 yarn remove gulp 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								После каждой установки, обновления или удаления пряжа обновляет файл yarn.lock, который отслеживает точную версию пакета, установленную в каталоге node\_modules. Аналогичная функция была обновлена в npm. Теперь есть `package-lock.json` которые ведут себя точно так же, как и `yarn.lock` в новых версиях npm.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Номера версий пакета и то, что они означают
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Первый выпуск пакета npm всегда равен 1.0.0
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Исправлены ошибки, или незначительные изменения увеличивали третью цифру, а hense 1.0.0 стал 1.0.1
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Новые функции, которые не прерывают предыдущие версии пакета, увеличивают вторую цифру, hense 1.0.0 станет 1.1.0
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Все изменения, которые нарушают предыдущие выпуски пакета, увеличивают первую цифру, hense 1.0.0 станет 2.0.0
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Важно помнить об этом при обновлении пакетов, чтобы сохранить стабильный проект!
							 |