Файл 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 цифры:
Первая
основной выпускВторая
вспомогательная версияТретья
выпуск исправлений
Предусмотрины следующие правила:
~
если вы пишете~0.13.0
, значит хотите обновлять только выпуски исправлений.0.13.1
это пройдет,0.14.0
это не пройдет^
если вы пишете^0.13.0
, вы хотите обновить патч и релизы:0.13.1
,0.14.0
это пройдет*
принимаете все обновления, включая обновления основных версий>
принимаете любую версию выше указанной>=
принимаете любую версию, равную или выше той, которую вы указали<=
принимаете любую версию, равную или ниже той, которую вы указалибез символа
принимаете только указанную версиюlatest
вы хотите использовать последнюю доступную версию
Возможные поля
name
реальное название пакета, а не название приложения. Если лень искать адекватное название в общем пространстве имен, можно использовать пространство имен своего аккаунта@hmarketing/test
но оно платное.
version
версия проекта
description
описание проекта
main
точка входа для пользователей CommonJS
, подключение идет за счет команды require("validate-npm-pc")
, папку в проекте лучше сделать логически правильную ./cjs/mask.js
package.json"main": "./cjs/mask.js"
module
точка входа для пользователей ES
, подключение идет за счет команды import from "validate-npm-pc"
, папку в проекте лучше сделать логически правильную ./esm/mask.js
package.json"module": "./esm/mask.js"
type
определяет тип пакета и то, как Node.js
должен интерпретировать файлы с расширением .js
. Если файл package.json
не содержит этого поля, файлы .js
рассматриваются как CommonJS
. Значение module
указывает Node.js
интерпретировать файлы с расширением .js
внутри пакета как использующие синтаксис ES
files
массив, указывающий какие файлы должны быть включены, когда наш пакет опубликован
keywords
список ключевых слов для улучшения поиска нашего пакета на веб сайте
NPM
homepage
как правило, проект связан с веб сайтом который можно тут указать. В качестве альтернативы, вы также можете создать файл README
bugs
цель этого поля, указать на электронную почту поддержки
funding
в этом поле вы можете указать любые ссылки для финансирования вашего пакета с открытым исходным кодом
author
автор проекта
contributors
как и поле author
, contributors
предоставляет информацию о разработчиках пакета
license
тип лицензии
scripts
определите команды для создания, выпуска и тестирования проекта
build
этот скрипт компилирует файлыTypeScript
вJavaScript
, используяtsc
запускает две отдельные сборки, используя файлы конфигурацииTypeScript
, которые мы будем создаватьtsconfig.json
иtsconfig.cjs.json
release
сценарий сначала запускаетbuild
, в случае успеха, публикует изменения, используяchangeset publish
test
: запускает наши тесты, используя Jest
devDependencies
зависимости, которые нужны для работы нашего модуля в режиме разработки
dependencies
зависимости, которые нужны для работы нашего модуля в режиме продакшина, эти зависимости будут установлены при скачивание пакета из NPM
хранилищя
peerDependencies
зависимости, которые должны быть установлены руками разработчика совместно с вашим пакетом
peerDependenciesMeta
можно пометить зависимости как необязательные. В таком случае NPM
не будет выдавать предупреждение, если указанный пакет не установлен
bundleDependencies
зависимости, которые при публикации пакета объединяются с ним
optionalDependencies
позволяет указать некритические зависимости, без которых ваше приложение сможет работать
publishConfig
теги приложения
workspaces
упрощают работу с монорепозиториями. Монорепозиторий - это способ организации проекта в котором множество подпроектов хранится в одном и том же репозитории
files
поле состоит из множества файлов, которые необходимо загрузить в реестр, когда ваш пакет публикуется
main
точка входа в программу определена в свойстве. Когда вам требуется пакет, вы фактически импортируете файл, описанный в main
свойстве. Есть альтернатива Node.js 12+
, известную как 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
поле описывает как в текущем проекте должны рассматриваться .js
файлы, если файл package.json
не содержит поля type
, то файлы .js
рассматриваются как CommonJS
модули. Если поле type
содержит ключ module
, значит рассматриваются как ESM
модули
browser
поле используется вместо main
, чтобы указать, должен ли пакет использоваться в браузере вместо проекта Node.js
bin
в некоторых случаях необходимо установить пакеты NPM
, чтобы их можно было запускать непосредственно из операционной системы, любого каталога. bin
указывает исполняемые файлы. Вы можете иметь следующую конфигурацию:
{
"bin": {
"dyte": "./dyte.js",
"myapp": "./cli.js"
}
}
После установки пакета на глобальном уровне, вы сможете запускать команды, dyte
и
myapp
прямо из вашего терминала
directories
папка с исполняемыми файлами
repository
ссылка на репозиторий в Гите
config
позволяет указать конфигурацию для вашего пакета, который сохраняется в пределах версий пакетов