Перейти к содержимому

Как установить зависимости из package json

  • автор:

Как установить зависимости из package json

Кроме встроенных и кастомных модулей Node.js существует огромный пласт различных библиотек и фреймворков, разнообразных утилит, которые создаются сторонними производителями и которые также можно использовать в проекте, например, express, grunt, gulp и так далее. И они тоже нам доступны в рамках Node.js. Чтобы удобнее было работать со всеми сторонними решениями, они распространяются в виде пакетов. Пакет по сути представляет набор функциональностей.

Для автоматизации установки и обновления пакетов, как правило, применяется система управления пакетами или менеджеры. Непосредственно в Node.js для этой цели используется пакетный менеджер NPM (Node Package Manager). NPM по умолчанию устанавливается вместе с Node.js, поэтому ничего доустанавливать не требуется. Но можно обновить установленную версию до самой последней. Для этого в командной строке/терминале надо запустить следующую команду:

npm install npm@latest -g

Чтобы узнать текущую версию npm, в командной строке/терминале надо ввести следующую команду:

npm -v

Для нас менеджер npm важен в том плане, что с его помощью легко управлять пакетами.

Установка пакетов

Для установки пакета через npm применяется команда npm install , после которой указываются пакеты

npm install имя_пакета1 имя_пакета2 имя_пакетаN

В качестве демонстрации будем устанавливать пакет lodash . Lodash представляет собой библиотеку, которая позволяет манипулировать данными, в частности, массивами. Кому интересно, может подробнее узнать на официальном сайте библиотеки — https://lodash.com/.

Допустим, для проекта где-нибудь в файловой системе определим каталог app и перейдем в терминале/командной строке к папке проекта с помощью команды cd . Затем для установки Lodash в проект введем команду

npm install lodash

После установки express в папке проекта app появится подпапка node_modules , в которой будут хранится все установленные внешние модули. В частности, в подкаталоге node_modules/lodash будут располагаться файлы библиотеки Lodash.

NPM в Node.js

Кроме того, при установке пакета в папку проекта добавляется файл package.json . После добавления lodash в нашем случае он будет иметь примерно следующий вид:

Файл package.json представляет собой объект-конфигурацию в формате json, где каждое свойство представляет отдельную секцию. Так, здесь определена секция «dependencies», которая хранит установленные пакеты. И здесь мы видим, что у нас установлен пакет «lodash», а версия пакета — «^4.17.21».

Также в проекте создан еще один файл — package-lock.json . Этот файл автоматически генерируется при любых операциях, в которых npm изменяет файл package.json и структуру каталогов/файлов в каталоге node_modules . Данный файл упрощает для npm управление пакетами.

После установке библиотеки lodash мы можем ее использовать. Так, определим в папке проекта файл app.js со следующим кодом:

const lodash = require("lodash") const people = ["Tom", "Sam", "Bob"]; const employees = ["Tom", "Alice", "Sam"]; // объединение массивов - в результате только уникальные значения const result1 = lodash.union(people, employees); console.log(result1); // [ "Tom", "Sam", "Bob", "Alice" ] // пересечение массивов - в результате только общие значения const result2 = lodash.intersection(people, employees); console.log(result2); // [ "Tom", "Sam" ]

Поскольку мы установили библиотеку lodash через npm, то мы можем получить соответствующий модуль через выражение require :

const lodash = require("lodash")

Затем мы можем обращаться к функциям этого модуля. Для демонстрации здесь применяется функция uninon , которая объединяет два массива (множества) и возвращает новое множество только с уникальными значениями. А функция intersection() также применяется к массивам, но возвращает множество, которое содержит только общие для всех массивов элементы.

В консоли запустим файл app.js командой node app.js :

c:\app> node app.js [ "Tom", "Sam", "Bob", "Alice" ] [ "Tom", "Sam" ] c:\app>

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

npm uninstall пакет1 пакет2 пакетN

Например, удалим ранее установленный lodash:

npm uninstall lodash

Если после удаления мы откроем папку node_modules , то увидим, что она пустая. И также изменится файл package.json — он будет содержать пустой объект:

Получение информации о пакете

С помощью команды npm info [пакет] можно получить информацию об определенном пакете. Например, получим информацию о пакете lodash:

c:\app> npm info lodash lodash@4.17.21 | MIT | deps: none | versions: 114 Lodash modular utilities. https://lodash.com/ keywords: modules, stdlib, util dist .tarball: https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz .shasum: 679591c564c3bffaae8454cf0b3df370c3d6911c .integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== .unpackedSize: 1.4 MB maintainers: - mathias - jdalton - bnjmnt4n dist-tags: latest: 4.17.21 published over a year ago by bnjmnt4n c:\app>

Здесь мы видим большой массив данных типа версии, лицензии, кто поддерживает, кто и когда опубликовал, размер пакета, домашнюю страницу.

Как установить зависимости с прошлого проекта в новый package.json?

Aetae

Команды —save нет, есть —save-prod (которая не нужна, т.к. по умолчанию).
—save-dev — очевидно, устанавливает devDependencies.

Зависимости для разработки идут в devDependencies, зависимости для самого приложения в dependencies(по умолчанию). Для локальной разработки разницы никакой(кроме организации) — все они летят кучей в node_modules, однако если вы делаете свой готовый модуль для npm, то при установке такого модуля будут установлены только обычные dependencies.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

bingo347

Дмитрий Беляев @bingo347 Куратор тега Node.js
Crazy on performance.

npm i это короткий вариант npm install
Без параметров он устанавливает зависимости из package.json и если есть файл package-lock.json, то нормализует папку node_modules по нему.
npm i name установит пакет name версии отмеченной тегом latest (тэг по умолчанию)
npm i name@tag установит пакет name версии отмеченной тегом tag
npm i name@5 установит пакет name версии 5.x.x где x.x — последний из 5
npm i name@5.3 установит пакет name версии 5.3.x где x — последний из 5.3
npm i name@5.3.1 установит пакет name версии 5.3.1
параметр —save или его короткий вариант -S сохранит зависимость в package.json в секции dependencies, с некоторых пор это поведение по умолчанию при наличии package.json
параметр —save-dev или его короткий вариант -D сохранит зависимость в package.json в секции devDependencies

А как устанавливать в Вашем конкретном случае можете решить только Вы.

Конфигурация package.json

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

Если вы разрабатываете приложение Node.js с большим количеством пакетов npm, нередко возникают предупреждения или ошибки при выполнении сборки проекта, если один пакет или несколько были обновлены. Иногда это возникает из-за конфликта версий или версия пакета является нерекомендуемой. Вот несколько советов по настройке файла package.json и поиску причин предупреждений или ошибок. Это не полное руководство по package.json. Здесь описывается только управление версиями пакета npm.

Система управления версиями пакета npm имеет строгие правила. Версии имеют следующий формат:

[major].[minor].[patch] 

Предположим, у вас есть пакет в приложении с версией 5.2.1. Основная версия — 5, дополнительная версия — 2, версия исправления — 1.

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

Стоит отметить, что некоторые компоненты пакета npm имеют зависимости. К примеру, чтобы использовать новую функцию пакета компилятора TypeScript (ts-loader) с webpack, возможно, придется также обновить пакет npm webpack и пакет webpack-cli.

Чтобы контролировать управление версиями, пакет npm поддерживает несколько нотаций, которые можно использовать в файле package.json. Вы можете использовать эти нотации для управления типом обновлений пакета, которые нужно принять в вашем приложении.

Предположим, вы используете React и должны включить пакеты npm react и react-dom. Существует несколько способов указать эти сведения в файле package.json. Например, вы можете указать точную версию пакета следующим образом.

"dependencies": < "react": "16.4.2", "react-dom": "16.4.2", >, 

Благодаря предыдущей нотации npm всегда получает указанную версию, 16.4.2.

Чтобы ограничить обновления только исправлениями (исправлениями ошибок), можно использовать специальные нотации. В этом примере:

"dependencies": < "react": "~16.4.2", "react-dom": "~16.4.2", >, 

вы используете символ тильды (~), чтобы указать пакету npm, что нужно обновлять пакет только исправлениями. Таким образом, npm может обновить react 16.4.2 до 16.4.3 (или 16.4.4, и т. д.), но он не будет принимать обновления основного или дополнительного номера версии. Версия 16.4.2 не будет обновлена до 16.5.0.

Также можно использовать символ вставки (^), чтобы npm мог обновлять дополнительный номер версии.

"dependencies": < "react": "^16.4.2", "react-dom": "^16.4.2", >, 

Благодаря этой нотации npm может обновить react 16.4.2 до 16.5.0 (или 16.5.1, 16.6.0 и т. д.), но он не будет принимать обновления основного номера версии. Версия 16.4.2 не будет обновлена до 17.0.0.

Когда npm обновляет пакеты, создается файл package-lock.json, содержащий списки фактических версий пакета npm, используемых в приложении, включая все вложенные пакеты. Хотя package.json контролирует прямые зависимости для приложения, он не управляет вложенными зависимостями (другими пакетами npm, необходимыми для определенного пакета npm). Вы можете использовать файл package-lock.json в цикле разработки, если вам необходимо убедиться, что другие разработчики и тестировщики используют те же пакеты, что и вы, включая вложенные пакеты. Дополнительные сведения см. в разделе package-lock.json в документации по npm.

Для Visual Studio файл package-lock.json не добавляется в проект, но его можно найти в папке проекта.

Зачем нужен package lock json и package json

В данной статье мы хотим познакомить вас с package lock и package json файлами. Разберемся, для чего необходимы lock файлы, при работе с npm.

Давайте начнём с npm (node-modules) — это сборщик пакетов в программной платформе node.js. Актуальную версию node.js можно скачать по ссылке. В основном предназначена для установки модулей. Для просмотра актуальных версий модулей npm создаёт файл package.json.

Что такое пакет в JavaScript?

Пакетом называется один или несколько файлов в JS, в виде инструмента или библиотеки. Npm хранит в себе самый большой набор пакетов. Npm необходим для скачивания пакетов и загрузки их, благодаря этому можно хорошо ускорить своё написание кода.

Что такое package.json?

Package.json — это файл, который представляет зависимости верхнего уровня от других пакетов при помощи семантического управления версиями. Любой пакет, может исходить из другого пакета, у них образуется взаимосвязь.

Package.json файл состоит:
1. Dependencies (зависимости) в которых хранятся названия и версия модуля
2. Метаданные — это описание, автор, лицензия и т.д.
3. Скрипты

Типы зависимостей в package.json

Давайте разберем несколько основных зависимостей проекта, чтобы лучше понимать что в него входит и что можно редактировать.
• dependencies — главные зависимости которые находятся в вашем проекте. Их можно применять и запускать в коде.
• devDependencies — взаимосвязи разработки.
• peerDependencies — равные взаимосвязи, при добавлении которых, мы даем понять какую версию для взаимосвязи следует установить
• optionalDependencies — второстепенные зависимости. Если при установке произойдет сбой, на основную сборку это не повлияет.
• bundledDependencies — в нём содержится массив пакетов. Данный массив нужен, если вам требуется добавить новую зависимость, которой нет в npm.

Назначение package-lock.json

package-lock.json если коротко, то предназначен для блокировки зависимостей от определенного номера версии. В package-lock.json файле перечислены зависимости вашего приложения и зависимости всех его зависимостей. Другими словами, он описывает, какую версию каждого отдельного пакета вы установили. Вот почему это намного дольше, чем package.json. Когда вы используете package-lock.json для установки зависимостей, вы получаете точно такие же пакеты, неважно, устанавливаете ли вы их сейчас или через несколько лет, когда мы, надеюсь, больше не будем использовать клавиатуры.

Чтобы установить зависимости на основе текущего package-lock.json файла, вы должны использовать npm ci вместо npm install.

Используя, npm ci вы сможете избежать проблем, которые возникают, когда приложение работает на вашем компьютере, но не работает на чужом, потому что они в конечном итоге загрузили различные зависимости из-за использования npm install.
Вот почему при запуске ваших сборок на сервере непрерывной интеграции вам следует устанавливать зависимости, используя npm ci вместо npm install. Это приведет к тому, что сборка CI-сервера будет работать так же, как на вашем компьютере.

Назначение package.json

Как говорилось уже выше, файл package.json — один из основных частей проекта основан на Node.js. Многие уже встречали этот файл у себя в проектах, но открыв его — ничего не поняли, так и остался для вас “тёмным туманом”. Зачем использовать данный файл?

Package специализирован не только лишь на взаимосвязях, но и для определения свойств проекта:

Чтоб отключить автоматическое создания файла следует написать в npmrc package-lock=false. Наличие package-lock.json в проекте необязательно.

Разбивка параметров

  • name — параметр name обозначает имя создаваемого проекта. Имя не должно превышать 214 знаков. Запрещены пробелы, подчеркивания, дефисы и CAPS LOCK.
  • Зачем нужно столько ограничений? После создания пакета происходит генерация url страницы.
  • author — описание об авторе проекта. Может быть имя, фамилия. Может быть представлен в виде массива с указаниями соц. сетей.
  • contributors — люди, которые разрабатывали данный проект (массив)
  • bugs — Отслеживание багов в проекте, можно указать ссылку на GitHub трекер.
  • homepage — Главная страница пакета
  • version — Указывает текущую версию пакета.

true-naming-version-project

Правила написания версии:
Первая цифра — это внесены критические изменения
Вторая цифра — обозначает, что выпуск содержит новые функции.
Третья цифра — указывает на исправления.

  • license — лицензия пакета
  • keywords — ключи(теги) для поиска вашего проекта. Чем лучше их задать, тем легче людям найти ваш пакет.
  • description — описание проекта. Если выкладывать в сеть, то данное описание обязательно!
  • repository — добавьте сюда git репозиторий пакета. Данное свойство содержит префиксы (gitlab:url, bitbucket:url)
  • main — Главная файл пакета
  • private — если значение true, то оно не даст загрузить набор в npm
  • scripts — скрипты, которые могут быть доступны через npm
  • dependencies — перечень установленных взаимосвязей
  • devDependencies — зависимости разработки
  • engines — показывает, какие средства и версии Node.js употребляться для работы пакета
  • browserslist — помогает показать, какие браузеры могут поддерживать пакет

Менеджеры версий

Существует несколько возможностей, разрешающих пользоваться многими версиями Node.js на вашем пк. Одна из них n, вторая — Node Version Manages(nvm). Кто искал данное решение, изучите информацию на ресурсах: Install Multiple Versions of Node.js using nvm.

Что из себя представляет расширение JSON

Формат JSON — это текстовый формат служит для обмена данными созданный на объектах JS. Данные в файле представлены в виде “ключ — значение”.

Как создать package.json?

npm-init-cmd

Из-за того, что package.json довольно глобальный и состоит из множества свойств, то в ручную его писать трудно и очень долго. Для быстроты решения задачи, npm сделали команду init. Откройте консоль в области текущей папки и напишите команду: npm init. Данная команда позволяет создать файл package.json. После этого вы получаете вот такой ответ:

Затем после всех вопросов, в основном вы все пропускаете через Enter, мы получаем те самые данные в виде “ключ — значение”

package-create-cmd

Наш package.json создан!

Установка модулей

Для начала в своём проекте в консоли напишите команду
npm install

Данная команда установит файл node_modules(короткий вариант команды npm i). Вторым этапом мы установим какую-нибудь библиотеку. К примеру: gulp-sass — помогает скомпилировать код, и сжать стили. Для установки напишем команду
npm install gulp-sass —save

Если вам нужны еще библиотеки просто перечисляете их, отделяя отступом. Но не забывайте добавлять аргумент —save, для сохранения библиотеки как зависимость самого проекта.

Аргумент —save показывает npm следить за актуальной версией package.json. Хорошая возможность, дать другим разработчиком увидеть какие зависимости необходимы проекту.

По итогу у нас получились созданные файлы: package.json, package-lock.json, node_modules.

Сгенерированная папка node_modules хранит в себе все модули вашего проекта. Данную папку в Git репозиторий мы не добавляем! Так как в ней хранится множество зависимостей и они будут только добавляться, вы будете очень долго ждать загрузки. Загружать нужно только 2 файла package.json, package-lock.json, даже после того, как другой разработчик сделает копию вашего проекта, он сможет установить нужные зависимости сохраненные в package.json.

Не забудьте добавить файл node_modules в gitignore.

Заключение

По итогу, в данной статье мы разобрали базу package и package lock, рассказали о самых распространенных и часто встречающихся ошибках, которые следует избегать.

Углубились в структуру файлов. Показали как установить node_modules, а также научились устанавливать дополнительные библиотеки.

В конечном итоге помните, что на git node_modules лучше не добавлять. И теперь любой скопированный проект вы сможете настроить сами, так, чтобы он работал.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *