В данной статье мы хотим познакомить вас с 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?

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

Затем после всех вопросов, в основном вы все пропускаете через 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 лучше не добавлять. И теперь любой скопированный проект вы сможете настроить сами, так, чтобы он работал.

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

Ограниченный HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.