Файл package.json
Файл package.json представляет собой центральный репозиторий настроек для инструментальных средств, используемых в проекте. Кроме того, он является тем местом, куда npm записывает сведения об именах и версиях установленных пакетов. Любая директория, в которой есть этот файл, интерпретируется как Node.js-пакет. Способ использования файла package.json зависит от того, собираетесь ли вы скачивать пакет или публиковать его в репозитории npmjs.com.
Основные поля в package.json
Файл package.json содержит несколько важных полей, в том числе:
nameназвание вашего проекта. Это имя должно быть уникальным в реестреNPMversionномер версии вашего проекта в форматеx.y.z.descriptionкраткое описание вашего проектаdependenciesсписок зависимостей, необходимых для запуска вашего проекта. Эти зависимости устанавливаютсяNPMи перечислены в разделе зависимостей вашего файлаpackage.jsondevDependenciesсписок зависимостей, которые необходимы только для разработки, например инструментов тестирования или сборки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.jsonreleaseсценарий сначала запускаетbuild, в случае успеха, публикует изменения, используяchangeset publishtest: запускает наши тесты, используя 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 позволяет указать конфигурацию для вашего пакета, который сохраняется в пределах версий пакетов