Введение в использование NPM

NPM (Node Package Manager) — это инструмент управления пакетами JavaScript и менеджер пакетов по умолчанию для Node.js.

NPM позволяет разработчикам легко скачивать, устанавливать, делиться и управлять зависимостями и инструментами проекта.

NPM — это инструмент управления пакетами, поставляемый вместе с Node.js. Поэтому обычно вам нужно установить только Node.js, и NPM будет автоматически установлен в вашей системе.

Основные возможности:

  • Управление пакетами: NPM помогает устанавливать и управлять различными сторонними библиотеками (пакетами), необходимыми вашему проекту. Например, вы можете устанавливать, обновлять или удалять зависимости с помощью простых команд.

  • Управление версиями: NPM поддерживает контроль версий, позволяя вам зафиксировать конкретную версию зависимости или выбрать последнюю версию при необходимости.

  • Публикация пакетов: NPM позволяет разработчикам публиковать свои собственные библиотеки в реестре NPM, а другие разработчики могут скачивать и использовать эти библиотеки через NPM.

  • Инструмент командной строки: NPM предоставляет мощный инструмент командной строки, который можно использовать для различных операций, таких как установка пакетов, запуск скриптов, инициализация проектов и многого другого.

Поскольку последняя версия Node.js уже включает NPM, мы можем напрямую проверить это, введяnpm -vдля проверки того, успешно ли он установлен. Если появится номер версии, установка прошла успешно:

$ npm -v
2.3.0

Если у вас установлена более старая версия npm, вы можете легко обновить её с помощью команды npm. Команда выглядит следующим образом:

$ sudo npm install npm -g
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
[email protected] /usr/local/lib/node_modules/npm

Если вы используете систему Windows, можно воспользоваться следующей командой:

npm install npm -g

Использование команд npm для установки модулей

Синтаксис установки модуля Node.js с помощью npm выглядит следующим образом:

$ npm install <Module Name>

В следующем примере мы используем команду npm для установки распространённого модуля веб-фреймворка Node.js.express:

$ npm install express

После установки пакет express помещается в каталог node_modules в каталоге проекта. Поэтому в вашем коде достаточно использоватьrequire('express')таким образом; нет необходимости указывать путь к стороннему пакету.

var express = require('express');

Глобальная установка против локальной установки

Установка пакетов npm делится на два типа: локальная установка и глобальная установка. С точки зрения командной строки единственное различие — есть ли-gпараметр.

Локальная установка:Устанавливает пакет в каталог node_modules и сохраняет информацию в поле dependencies в package.json.

npm install express          # 本地安装

Глобальная установка:Используется для установки инструментов командной строки или пакетов, которые должны использоваться в нескольких проектах.

npm install express -g   # 全局安装

Если возникает следующая ошибка:

npm err! Error: connect ECONNREFUSED 127.0.0.1:8087 

Решение:

$ npm config set proxy null

Локальная установка

  • Область действия: По умолчанию npm будет устанавливать пакет вnode_modulesпапку текущего проекта. Это означает, что каждый проект, использующий пакет, будет иметь свою собственную копию пакета.

  • Назначение: Локальная установка обычно используется для зависимостей проекта. Каждый проект может иметь свои версии зависимостей, что помогает обеспечить стабильность и воспроизводимость проекта.

  • Команда установки: Выполните в каталоге проектаnpm install <package-name>установит пакет вnode_modulesпапку, иpackage.jsonдобавит зависимость в файл.

  • Управление версиями: С помощьюpackage.jsonиpackage-lock.jsonфайла, управляйте версиями зависимостей, чтобы обеспечить согласованность в разных средах.

Глобальная установка

  • Область применения: Глобальная установка устанавливает пакеты в системный каталог, обычно/usr/local/bin(в Unix-подобных системах) или%AppData%\npm(в Windows).

  • Назначение: Глобальная установка используется для инструментов или утилит командной строки, которые не нужно повторно устанавливать в каждом проекте. Например, установка глобальногоcreate-react-appможно использовать для создания новых проектов React.

  • Команда установки: Используйте-gфлаг для глобальной установки пакетов, напримерnpm install -g <package-name>。

  • Управление версиями: Версии глобально установленных пакетов управляются npm, но они неpackage.jsonотражаются в проекте. Это означает, что глобально установленные пакеты могут использоваться совместно разными проектами, но они также могут вызывать проблемы из-за конфликтов версий.

ОсобенностиЛокальная установкаГлобальная установка
Область установкиДоступно только в текущем проектеДоступно в общесистемной глобальной среде
Использование командыnpm install package-namenpm install -g package-name
Место установкиnode_modulesкаталогаСистемный глобальный каталог (зависит от ОС)
Сценарии использованияЗависимости проекта (библиотеки, фреймворки)Инструменты CLI, генераторы проектов
Способ доступаС помощьюrequire()илиimportusingИспользуются непосредственно в командной строке
Объявление зависимостейВpackage.jsonзаписывается вnotpackage.jsonзаписывается в
Контроль версийРазные версии могут использоваться в разных проектахВ системе хранится только одна версия
Проблемы с правами доступаСпециальные разрешения не требуютсяМогут потребоваться права администратора

Если вы хотите иметь обе функциональности, необходимо установить его в обоих местах или использоватьnpm link。

Далее мы установим express глобально

$ npm install express -g

Процесс установки выводит следующее содержимое; в первой строке показаны номер версии модуля и место установки.

[email protected] node_modules/express
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected])
└── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected])

Просмотр установленной информации

Вы можете использовать следующую команду, чтобы просмотреть все глобально установленные модули:

$ npm list -g

├─┬ [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
……

Чтобы просмотреть номер версии конкретного модуля, вы можете использовать следующую команду:

$ npm list grunt

projectName@projectVersion /path/to/project/folder
└── [email protected]

Удаление модулей

Мы можем использовать следующую команду, чтобы удалить модуль Node.js.

$ npm uninstall express

После удаления вы можете перейти в каталог /node_modules/, чтобы проверить, существует ли ещё пакет, или использовать следующую команду для проверки:

$ npm ls

Обновление модулей

Мы можем использовать следующую команду для обновления модуля:

$ npm update express

Поиск модулей

Используйте следующее для поиска модулей:

$ npm search express

Создание модулей

Для создания модуля необходим файл package.json. Мы можем использовать NPM, чтобы сгенерировать файл package.json, и сгенерированный файл содержит базовый результат.

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (node_modules) example                   # 模块名
version: (1.0.0) 
description: Node.js 测试模块(www.example.com)  # 描述
entry point: (index.js) 
test command: make test
git repository: https://github.com/example/example.git  # Github 地址
keywords: 
author: 
license: (ISC) 
About to write to ……/node_modules/package.json:      # 生成地址

{
  "name": "example",
  "version": "1.0.0",
  "description": "Node.js 测试模块(www.example.com)",
  ……
}


Is this ok? (yes) yes

Вам нужно ввести вышеуказанную информацию в соответствии с вашей ситуацией. После ввода "yes" в конце будет сгенерирован файл package.json.

Далее мы можем использовать следующую команду, чтобы зарегистрировать пользователя в реестре npm (регистрация с адресом электронной почты):

$ npm adduser
Username: mcmohd
Password:
Email: (this IS public) [email protected]

Далее мы будем использовать следующую команду, чтобы опубликовать модуль:

$ npm publish

Если все вышеперечисленные шаги были выполнены правильно, вы можете использовать npm, чтобы установить его так же, как и другие модули.


Номер версии

При использовании NPM для скачивания и публикации кода вы столкнётесь с номерами версий. NPM использует семантические номера версий для управления кодом. Вот краткое введение.

Номера версий следуют семантическому версионированию (SemVer) в формате MAJOR.MINOR.PATCH и могут иметь дополнительные метки.

  • MAJOR (основная версия): Увеличивается, когда вы вносите несовместимые изменения API. Например:2.0.0。
  • MINOR (минорная версия): Увеличивается, когда вы добавляете новую функциональность, сохраняя обратную совместимость. Например:1.1.0。
  • PATCH (патч-версия): Увеличивается, когда вы исправляете ошибки, не добавляя новую функциональность. Например:1.0.1。

Дополнительные метки

  • Предварительная версия: например1.0.0-alphaили1.0.0-beta.1, указывая, что эта версия всё ещё тестируется.
  • Метаданные сборки: например1.0.0+build.1, который предоставляет информацию о сборке.

Примеры установки

  • Установить конкретную версию:npm install [email protected]
  • Установить последнюю мажорную версию:npm install package-name@^1.2.3(установить1.x.xпоследнюю версию)

Часто используемые команды NPM

NPM предоставляет множество команд. Вы можете использоватьnpm helpдля просмотра всех команд.

КомандаОписание
npm initИнициализировать новыйpackage.jsonфайл, интерактивно вводя информацию.
npm init -yБыстро создатьpackage.jsonфайл с настройками по умолчанию.
npm install package-nameУстановить указанный пакет локально.
npm install -g package-nameУстановить указанный пакет глобально, сделав его доступным во всей системе.
npm installУстановкаpackage.jsonвсе зависимости, перечисленные в
npm install package-name --save-devУстановить пакет и добавить его вdevDependencies。
npm update package-nameОбновить указанный зависимый пакет.
npm uninstall package-nameУдалить указанный зависимый пакет.
npm uninstall -g package-nameУдалить указанный пакет глобально.
npm listПросмотреть список установленных пакетов зависимостей для текущего проекта.
npm list -g --depth=0Просмотреть список глобально установленных пакетов зависимостей (без раскрытия дерева зависимостей).
npm info package-nameПросмотреть подробную информацию о пакете, включая версию и зависимости.
npm loginВойти в свою учетную запись NPM.
npm publishОпубликовать текущий пакет в реестре NPM.
npm unpublish package-nameОтменить публикацию пакета в реестре NPM (обычно возможно только в течение 24 часов).
npm cache clean --forceОчистить кэш NPM.
npm auditПроверить зависимости проекта на наличие уязвимостей безопасности.
npm audit fixАвтоматически исправлять известные уязвимости.
npm run script-nameЗапуститеpackage.jsonскрипт, определённый в , напримерnpm run start。
npm startЗапуститеstartскрипт (эквивалентноnpm run start)。
npm testЗапуститеtestскрипт.
npm buildЗапуститеbuildскрипт.
npm outdatedПоказать список пакетов зависимостей в проекте, для которых доступны обновления.
npm version patch/minor/majorUpdatepackage.jsonномер версии в , автоматически обновляя версию.
npm ciИспользуйтеpackage-lock.jsonдля быстрой установки зависимостей, подходит для сред CI/CD.

Помимо того, что рассмотрено в этой главе, NPM предоставляет множество других возможностей, а package.json также имеет много других полезных полей.

Помимо возможностиhttps://docs.npmjs.com/просмотреть официальную документацию по адресу , ниже приведены некоторые другие часто используемые команды NPM.


Использование зеркала NPM Taobao

Поскольку прямое использование официального зеркала npm в Китае очень медленное, для решения этой проблемы мы можем использовать зеркало, предоставляемое Taobao (cnpm или путём настройки NPM), чтобы ускорить загрузку и установку пакетов.

Зеркало NPM Taobao — это полное зеркало npmjs.org. Вы можете использовать его для замены официальной версии (только для чтения). Частота синхронизации в настоящее время — раз в 10 минут, чтобы обеспечить максимально возможную синхронизацию с официальным сервисом.

Вы можете использовать настроенный в Taobao инструмент командной строки cnpm (с поддержкой сжатия gzip) для замены стандартного npm:

$ npm install -g cnpm --registry=https://registry.npmmirror.com

Далее мы можем использовать cnpm вместо npm для установки и управления пакетами:

$ cnpm install [name]

Описание и использование package.json

package.json — это основной файл в проекте Node.js, содержащий метаданные проекта, зависимости, скрипты и другую информацию.

Файл package.json используется для описания метаданных проекта и зависимостей. Обычно он находится в корневом каталоге проекта и служит файлом конфигурации проекта.

Файл package.json — это файл в формате JSON, содержащий следующие основные поля:

  • name: Название проекта, которое должно быть уникальным и обычно состоять из строчных букв и дефисов.
  • version: Номер версии проекта, соответствующий семантическому версионированию.
  • description: Краткое описание проекта.
  • main: Входной файл проекта, обычно файл запуска приложения.
  • scripts: Определяет серию скриптов командной строки, которые могут выполнять определённые задачи в проекте.
  • dependencies: Перечисляет все пакеты зависимостей, необходимые для запуска проекта, и их версии.
  • devDependencies: Перечисляет пакеты зависимостей и их версии, необходимые только во время разработки.
  • peerDependencies: Перечисляет пакеты, от которых, как ожидает проект, должны также зависеть его пакеты зависимостей.
  • optionalDependencies: Перечисляет необязательные пакеты зависимостей.
  • engines: Указывает версию Node.js, совместимую с проектом.
  • repository: Информация о репозитории с кодом проекта, например URL репозитория GitHub.
  • keywords: Ключевые слова проекта, помогающие найти проект при поиске в npm.
  • author: Информация об авторе проекта.
  • license: Информация о лицензии проекта.

Использование:

  1. Инициализируйте проект: Запуститеnpm initв каталоге проекта, и npm поможет вам создатьpackage.jsonфайл, или автоматически сгенерироватьpackage.json。

  2. Установка зависимостей: используйтеnpm install <package-name>команду для установки зависимостей. npm автоматически добавит зависимости вpackage.jsonв файлеdependenciesилиdevDependenciesи создастpackage-lock.jsonфайл для фиксации версий зависимостей.

  3. Управление скриптами: определяйте команды вscriptsполе, например"start": "node app.js", после чего вы можете использоватьnpm startкоманду для запуска этих скриптов.

  4. Контроль версий: используйтеnpm versionкоманда для управления номером версии проекта. npm автоматически обновит номер версии вpackage.jsonи создаст новый Git-тег.

  5. Опубликовать пакет: Когда проект готов к публикации в npm, вы можете использоватьnpm publishкоманду, и npm прочитает информацию вpackage.jsonдля публикации пакета.

  6. Управление зависимостями:package.jsonиpackage-lock.jsonработают вместе с файлом, чтобы обеспечить согласованные версии зависимостей в разных средах.

Типичная структура файла package.json выглядит следующим образом:

Пример

{
  "name": "my-project",
  "version": "1.0.0",
  "description": "Простой проект Node.js",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "test": "echo \"Ошибка: тест не указан\" && exit 1"
  },
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "nodemon": "^2.0.20"
  },
  "keywords": ["node", "npm", "example"],
  "author": "Ваше имя",
  "license": "MIT"
}

Описания полей:

ПолеОписание
nameНазвание проекта, обычно строчные буквы и дефисы.
versionНомер версии проекта, следующийязыкзначениепреобразованиеверсияспецификация (SemVer)。
descriptionКраткое описание проекта.
mainВходной файл проекта, по умолчаниюindex.js。
scriptsОпределяет исполняемые команды скриптов для проекта, такие какnpm start。
dependenciesБиблиотеки зависимостей, необходимые во время выполнения, добавляемые при установке вnode_modules。
devDependenciesБиблиотеки зависимостей, используемые во время разработки, не устанавливаются в производственных средах.
keywordsМассив ключевых слов, помогающий описать проект и найти его в поиске NPM.
authorИнформация об авторе проекта.
licenseТип лицензии проекта, напримерMIT、ISC。

Преимущества использования package.json

  • Управление зависимостями: Централизованное управление зависимостями проекта и их версиями.
  • Автоматизация задач: С помощьюscriptsполя можно удобно запускать часто используемые задачи.
  • Контроль версий: Обеспечение согласованности проекта и версий его зависимостей, что упрощает командную работу.
  • Описание проекта: Предоставление метаданных о проекте, что упрощает публикацию и обмен.

Управление зависимостями

dependencies: Хранит зависимости, необходимые для запуска проекта.

"dependencies": {
  "express": "^4.17.1"
}

При установке зависимостей используйте:

npm install express

devDependencies: Содержит зависимости, необходимые во время разработки проекта.

"devDependencies": {
  "nodemon": "^2.0.20"
}

При установке зависимостей используйте:

npm install nodemon --save-dev

Поле scripts

Поле scripts используется для определения команд, которые можно выполнить через npm run <script>. Обычно используемые скрипты включают:

"scripts": {
  "start": "node app.js",
  "test": "jest",
  "build": "webpack --mode production",
  "dev": "nodemon app.js"
}

Пример запуска скриптов:

npm run dev   # 执行 "nodemon app.js"
npm start     # 等同于 "node app.js",可以直接用 npm start 运行

Объяснение символов в номерах версий

  • ^(каретка): означает установку последней версии, совместимой с текущей мажорной версией. Например,^4.17.1установит4.x.xпоследнюю версию в .
  • ~(тильда): означает установку последней версии, совместимой с текущей минорной версией. Например,~4.17.1установит4.17.xпоследнюю версию в .

Часто используемые команды

Инициализация файла package.json:

npm init

Использование npm init -y позволяет быстро создать файл package.json по умолчанию.

Просмотр зависимостей проекта:

npm list --depth=0

Обновление зависимостей:

npm update package-name

Примечания

  • Сделайтеpackage.jsonфайл кратким и точным, избегая ненужных полей.
  • Используйтеpackage-lock.jsonчтобы зафиксировать версии зависимостей и обеспечить согласованность проекта в разных средах.
  • Регулярно обновляйте зависимости, чтобы использовать последние функции и исправления безопасности.

Для получения дополнительной информации см.:https://npmmirror.com/。

Другие расширения