freeCodeCamp/guide/russian/nodejs/npm/index.md

339 lines
17 KiB
Markdown
Raw Normal View History

2018-10-12 20:00:59 +00:00
---
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
Важно помнить об этом при обновлении пакетов, чтобы сохранить стабильный проект!