Полный цикл в digital

Файл package.json

Файл package.json представляет собой центральный репозиторий настроек для инструментальных средств, используемых в проекте. Кроме того, он является тем местом, куда npm записывает сведения об именах и версиях установленных пакетов. Любая директория, в которой есть этот файл, интерпретируется как Node.js-пакет. Способ использования файла package.json зависит от того, собираетесь ли вы скачивать пакет или публиковать его в репозитории npmjs.com.

Основные поля в package.json

Файл package.json содержит несколько важных полей, в том числе:

  • name название вашего проекта. Это имя должно быть уникальным в реестре NPM
  • version номер версии вашего проекта в формате x.y.z.
  • description краткое описание вашего проекта
  • dependencies список зависимостей, необходимых для запуска вашего проекта. Эти зависимости устанавливаются NPM и перечислены в разделе зависимостей вашего файла package.json
  • devDependencies список зависимостей, которые необходимы только для разработки, например инструментов тестирования или сборки
  • peerDependencies зависимости, которые должны быть установлены разработчиком совместно с вашим пакетом
  • scripts список скриптов, которые можно запустить с помощью команды npm run

Скрипты в package.json

В разделе сценариев файла package.json вы можете определить сценарии, которые можно запускать с помощью команды npm run. Эти сценарии могут автоматизировать различные задачи, такие как создание и тестирование кода. Чтобы определить скрипт, просто добавьте пару ключ-значение в раздел скриптов вашего файла:

package.json"scripts": {
    "dev": "webpack --mode development",
    "prod": "webpack --mode production"
}

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

npm run dev

Скачивание пакетов через package.json

Для скачивания пакетов используется package.json файл. Создайте в директории вашего проекта файл и добавьте в него следующий код:

package.json{
  "devDependencies": {
    "jquery": "^3.6.1"
  }
}

Затем сохраните файл и выполните в терминале команду которая запустит файл package.json:

npm install

Что такое package-lock.json

package-lock.json это лок-файл, или файл блокировки, содержащий информацию о зависимостях/пакетах с их точными номерами версий, которые были установлены для проекта node.js.

  • Помогает членам команды, работающим над одним и тем же репозиторием, инсталлировать именно те версии пакетов, которые были установлены ранее, даже если для пакетов были выпущены новые версии. Это обеспечивает одинаковое дерево node_modules на разных компьютерах/средах
  • Файл package-lock.json используется для фиксации зависимостей к определенному номеру версии
  • Файл автоматически генерируется при изменении дерева node_modules или файла package.json
  • Всякий раз при клонировании репозитория и запуска npm i на новом компьютере, npm сначала обратит внимание на наличие файла package-lock.json, при обнаружении он начнет установку пакетов, указанных в этом файле. В противном случае заглянет в файл package.json и начнет установку необходимых зависимых пакетов

Команда npm install учитывает package-lock.json, только если устанавливаемый пакеты находится в диапазоне версий package.json.

Если версия пакета указанная в лок-файле, не входит в диапазон версий файла package.json, пакеты обновляются и package-lock.jsonперезаписывается. Чтобы вместо перезаписи package-lock.json установка завершилась неудачей, используется команда npm ci.

Версии пакетов

Учитывая, что при использовании semver все версии имеют 3 цифры:

  1. Первая основной выпуск
  2. Вторая вспомогательная версия
  3. Третья выпуск исправлений

Предусмотрины следующие правила:

  • ~ если вы пишете ~0.13.0, значит хотите обновлять только выпуски исправлений. 0.13.1 это пройдет, 0.14.0 это не пройдет
  • ^ если вы пишете ^0.13.0, вы хотите обновить патч и релизы: 0.13.1, 0.14.0 это пройдет
  • * принимаете все обновления, включая обновления основных версий
  • > принимаете любую версию выше указанной
  • >= принимаете любую версию, равную или выше той, которую вы указали
  • <= принимаете любую версию, равную или ниже той, которую вы указали
  • без символа принимаете только указанную версию
  • latest вы хотите использовать последнюю доступную версию

Возможные поля

name

name реальное название пакета, а не название приложения. Если лень искать адекватное название в общем пространстве имен, можно использовать пространство имен своего аккаунта@hmarketing/test но оно платное.

version

version версия проекта

description

description описание проекта

main

main точка входа для пользователей CommonJS, подключение идет за счет команды require("validate-npm-pc"), папку в проекте лучше сделать логически правильную ./cjs/mask.js

package.json"main": "./cjs/mask.js"
module

module точка входа для пользователей ES, подключение идет за счет команды import from "validate-npm-pc", папку в проекте лучше сделать логически правильную ./esm/mask.js

package.json"module": "./esm/mask.js"
type

type определяет тип пакета и то, как Node.js должен интерпретировать файлы с расширением .js. Если файл package.json не содержит этого поля, файлы .js рассматриваются как CommonJS. Значение module указывает Node.js интерпретировать файлы с расширением .js внутри пакета как использующие синтаксис ES

files

files массив, указывающий какие файлы должны быть включены, когда наш пакет опубликован

keywords

keywords список ключевых слов для улучшения поиска нашего пакета на веб сайте NPM

homepage

homepage как правило, проект связан с веб сайтом который можно тут указать. В качестве альтернативы, вы также можете создать файл README

bugs

bugs цель этого поля, указать на электронную почту поддержки

funding

funding в этом поле вы можете указать любые ссылки для финансирования вашего пакета с открытым исходным кодом

author

author автор проекта

contributors

contributors как и поле author, contributors предоставляет информацию о разработчиках пакета

license

license тип лицензии

scripts

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

  • build этот скрипт компилирует файлы TypeScript в JavaScript, используя tsc запускает две отдельные сборки, используя файлы конфигурации TypeScript, которые мы будем создавать tsconfig.json и tsconfig.cjs.json
  • release сценарий сначала запускает build, в случае успеха, публикует изменения, используя changeset publish
  • test: запускает наши тесты, используя Jest
devDependencies

devDependencies зависимости, которые нужны для работы нашего модуля в режиме разработки

dependencies

dependencies зависимости, которые нужны для работы нашего модуля в режиме продакшина, эти зависимости будут установлены при скачивание пакета из NPM хранилищя

peerDependencies

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

peerDependenciesMeta

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

bundleDependencies

bundleDependencies зависимости, которые при публикации пакета объединяются с ним

optionalDependencies

optionalDependencies позволяет указать некритические зависимости, без которых ваше приложение сможет работать

publishConfig

publishConfig теги приложения

workspaces

workspaces упрощают работу с монорепозиториями. Монорепозиторий - это способ организации проекта в котором множество подпроектов хранится в одном и том же репозитории

files

files поле состоит из множества файлов, которые необходимо загрузить в реестр, когда ваш пакет публикуется

main

main точка входа в программу определена в свойстве. Когда вам требуется пакет, вы фактически импортируете файл, описанный в main свойстве. Есть альтернатива Node.js 12+, известную как exports, который описан ниже

exports

exports вы можете определить точки входа в свой пакет, используя exports поле в качестве альтернативы main. Например, вы можете экспортировать submodule.js файл вашего проекта:

{
"exports": {
".": "./index.js",
"./submodule.js": "./src/submodule.js"
}
}

Также можно экспортировать в зависимости от того, использует ли пользователь пакета require или import:

{
"exports": {
"import": "./index-module.js",
"require": "./index-require.cjs"
},
"type": "module"
}

Условный экспорт часто используется для ESM модулей в качестве обратной совместимости, ключевое слово import можно использовать только в ESM

type

type поле описывает как в текущем проекте должны рассматриваться .js файлы, если файл package.json не содержит поля type, то файлы .js рассматриваются как CommonJS модули. Если поле type содержит ключ module, значит рассматриваются как ESM модули

browser

browser поле используется вместо main, чтобы указать, должен ли пакет использоваться в браузере вместо проекта Node.js

bin

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

{
"bin": {
"dyte": "./dyte.js",
"myapp": "./cli.js"
}
}

После установки пакета на глобальном уровне, вы сможете запускать команды, dyte и myapp прямо из вашего терминала

directories

directories папка с исполняемыми файлами

repository

repository ссылка на репозиторий в Гите

config

config позволяет указать конфигурацию для вашего пакета, который сохраняется в пределах версий пакетов

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг