npm - garevna/js-course GitHub Wiki

npm-50 npm

Менеджер пакетов npm - это крупнейший в мире реестр программного обеспечения
( около 3 миллиардов загрузок в неделю )

В реестре содержится более 600 000 пакетов

Open-source разработчики всего мира используют npm
для совместного использования и заимствования пакетов


Installation

Поскольку npm идет в составе Node.js, необходимо установить

Далее заходим в bash-25


npm-30 Commands

bash-20 which npm

bash-20 npm --version

bash-20 npm root
Папка для глобальной установки пакетов


bash-20 npm init

Эта команда создаст файл package.json в текущей папке
Предварительно нужно создать новую папку для проекта и перейти в нее

warn-25 package.json хранит зависимости проекта, т.е. список пакетов, необходимых для проекта
( для каждого пакета указана нужная версия )

При создании файла package.json npm задаст ряд вопросов о проекте,
который будет расположен в текущей папке

Ваши ответы будут использованы для установки значений полей:

name - название проекта
version - версия
description - краткое описание
author - автор ( вы )
repository - ссылка на репозиторий проекта
keywords - ключевые слова
scripts - объект, описывающий команды запуска скриптов с помощью npm run

Поскольку в дальнейшем вы сможете редактировать файл package.json,
можно особо не заморачиваться первоначальными установками wink-20


npm-30 package.json

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

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

✅ dependencies
✅ devDependencies

dependencies - зависимости пакета
эти пакеты будут непосредственно включены в сборку приложения

devDependencies - пакеты, необходимые на этапе сборки
в само приложение не встраиваются


npm-30 .npmrc

Файл конфигурации, откуда ( наряду с package.json ) npm будет считывать установки

Файл .npmrc может существовать для каждого проекта,
для каждого пользователя,
и глобально

Посмотреть настройки конфигурации по умолчанию можно с помощью команды

npm config ls -l

Изменить настройки можно с помощью команды

 npm config

Например, для автоматического сохранения зависимостей:

npm config set save=true

а для сохранения зависимостей с указанием точной версии пакета:

npm config set save-exact=true

bash-20 npm install

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

Часть этих пакетов нужна будет для сборки вашего приложения,
его тестирования, отладки, транспилляции и т.д.
Эти пакеты не будут включаться в тело приложения
Они помогут это тело постоить

Однако в самом приложении вы будете использовать сторонние библиотеки, фреймворки и т.д.
Эти пакеты будут включены в сборку вашего приложения

Короче, все эти пакеты нужно установить

Для этого вам понадобится команда npm install


ico20 Опция -g позволяет установить пакет глобально, чтобы он был доступен всем вашим приложениям

Глобальная установка пакета с именем <имя пакета>:
npm install -g <имя пакета>
Локальная установка пакета с именем <имя пакета>:
npm install <имя пакета>

Локальная - значит, пакет будет установлен в той директории ( папке пректа ), в которой вы находитесь в момент вызова npm


ico20 При установке пакетов с опцией --save или --save-dev

npm будет добавлять соответствующие записи

в раздел dir-20 dependencies или dir-20 devDependencies

cap-20 Например, команда
npm install  -g  css-loader  --save-dev

установит загрузчик css-loader глобально
и внесет соответствующую запись в devDependencies


dir-30 node_modules

Все установленные локально пакеты будут находиться в папке dir-20 node_modules текущего проекта

Необходимо всегда добавлять папку node_modules в gitignore

В git-репозитории никто никогда не хранит папку dir-20 node_modules,
однако если клонировать репо,
то установить все необходимые пакеты при наличии файла package.json очень легко

достаточно выполнить консольную команду bash-20 npm install,
и все пакеты, перечисленные в package.json, будут установлены
в соответствии с указанными версиями

gitignore


bash-20 npm run

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

Конкретнее - в раздел scripts:

"scripts": {
    "алиас" : "путь_к_файлу_скрипта"
    ...
}

В этом разделе мы описываем скрипты или пакеты, которые будем запускать с помощью команды npm run

Эта команда запускает указанный скрипт

"scripts": {
    "start" : "node index.js",
    "build" : "webpack"
}

bash-20 npm list

Вывод списка установленных пакетов

Для вывода списка пакетов, установленных глобально, используйте опцию -g

npm list -g

npm list --depth=0

Для вывода краткого списка ( без подробностей о каждом пакете ) используется опция --depth=0


bash-20 npm search

поиск пакетов
cap-20 npm search babel


bash-20 link

Создание символических ссылок
  1. Глобальная символическая ссылка

Когда вы запускаете npm link в корневой папке проекта, npm создает символическую ссылку из вашего каталога global node_modules в папку проекта

global node_modules представляет собой специальную папку, в которой хранятся все глобально установленные модули
npm install -g

Вы можете найти путь к вашему глобальному каталогу node_modules, запустив

npm root -g

cap-20

cap-20 1. создание символической ссылки в глобальной папке ( ~ ) на пакет в локальной папке

Перейдем в папку z/home/test/node_modules
и создадим символическую ссылку на пакет express в текущей папке

cap-20 2. Теперь перейдем в папку другого проекта ( /z/home/js-samples )
и создадим там символическую ссылку на пакет express,
установленный в папке ( /z/home/test/node_modules ),
на который есть символическая ссылка из глобальной папки ( ~ )

warn-25 Команда link предназначена для создания символических ссылок только на пакеты

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

npm unlink images
ls -al $(npm root -g)

npm-30 package-lock.json

Каждый раз при установке новой зависимости NPM автоматически генерирует lock-файл с именем package-lock.json

package-lock.json - это "слепок" текущего дерева зависимостей, который точно описывает дерево папок в директории node_modules

warn-25 package-lock.json никогда не будет опубликован, даже если его явно включить в сборку

package-lock.json включает поле integrity для проверки целостности пакета

Указание конкретной версии пакета в package.json фиксирует зависимости только верхнего уровня

Если ваше приложение будет запущено на другой машине ( пользователя ), то могут быть установлены другие версии пакетов более глубокого уровня, что может "сломать" работу приложения

Для того, чтобы у конечного пользователя вашего приложения всегда воспроизводилось дерево зависимостей, идентичное вашему на момент публикации, следует использовать shrinkwrap для создания точного слепка этих зависимостей и публикации этого слепка вместе с приложением


npm-20 npm shrinkwrap

Каждый раз, когда выполняется развертывание ( deploy ) приложения, Node.js запускает npm

Развертывание может существенно затянуться за счет установки новых версий пакетов, указанных в списке зависимостей вашего приложения

Избежать обновления зависимостей можно путем создания файла npm-shrinkwrap.json, который фиксирует текущие версии зависимостей вашего приложения

Формат этого файла полностью идентичен формату package-lock.json

warn-25 npm-shrinkwrap.json может быть частью опубликованного пакета

Если выполнить команду npm shrinkwrap в папке, в которой уже есть package-lock.json,

npm переименует package-lock.json в npm-shrinkwrap.json

Если в папке проекта будут оба файла, npm будет использовать npm-shrinkwrap.json и игнорировать package-lock.json

⚠️ **GitHub.com Fallback** ⚠️