Spec-Zone.ru › Deno 2

deno pack

Команда deno pack создаёт совместимый с npm tarball (.tgz) из проекта Deno, чтобы вы могли опубликовать библиотеку, написанную на Deno, непосредственно в реестре npm. Она транспилирует TypeScript в JavaScript, генерирует файлы объявлений .d.ts, переписывает спецификаторы импорта и формирует package.json, понятный потребителям, использующим только npm.

deno pack — это не аналог npm pack. Это этап сборки, который преобразует проект Deno/JSR в пакет, пригодный для публикации в npm, — примерно как deno transpile вместе с npm pack. Эта команда не читает существующий package.json, не учитывает .npmignore и не запускает скрипты жизненного цикла prepublishOnly / prepare.

Быстрый старт

›_
deno pack

deno pack считывает метаданные пакета из deno.json (name, version и exports, которые используются для публикации в JSR) и записывает сжатый tarball в текущую директорию.

Для deno.json следующего вида:

deno.json
{
  "name": "@scope/my-lib",
  "version": "1.0.0",
  "exports": "./mod.ts"
}

deno pack создаёт scope-my-lib-1.0.0.tgz (@ удаляется, а / становится - в соответствии с соглашением об именовании npm pack).

Содержимое tarball

Содержимое
Созданный package.json с полями name, version, type: "module", условным exports (types / import / default) и полем dependencies, сформированным на основе импортов jsr: / npm:.
Транспилированные файлы .js (по умолчанию со встроенными картами исходного кода; передайте --no-source-maps, чтобы исключить их).
Сгенерированные файлы объявлений .d.ts (создаются с помощью того же конвейера fast-check, что и deno publish).
Файлы README и LICENSE из корневой директории проекта, если они есть.

Включаются только файлы, достижимые по графу модулей из exports. Ресурсы, отличные от JS, например файлы данных или WASM, включаются только в том случае, если на них есть импорты из JS/TS. Если нужно включить произвольные файлы, укажите их в качестве позиционных аргументов:

›_
deno pack assets/icon.svg locales/*.json

Переписывание спецификаторов

Чтобы сгенерированный пакет работал в Node и у других потребителей npm, deno pack переписывает импорты во время транспиляции:

В исходном коде В tarball Примечания
jsr:@std/path @jsr/std__path Потребителям нужно настроить реестр npm для JSR.
npm:express@4 express Версия переносится в dependencies в package.json.
./utils.ts ./utils.js Меняется только расширение — структура путей остаётся прежней.
node:fs node:fs Без изменений.

Поскольку импорты JSR преобразуются в спецификаторы @jsr/..., всем, кто устанавливает опубликованный tarball, нужно настроить реестр npm для JSR. Проще всего один раз запустить npx jsr add в проекте-потребителе; команда настроит записи .npmrc для области @jsr.

Подмена API Deno

Если в коде используется глобальный объект Deno.*, deno pack добавляет @deno/shim-deno как зависимость времени выполнения и внедряет подмену, чтобы пакет мог работать в Node.js. Подмена поддерживает подмножество Deno.*, которое можно напрямую сопоставить с API Node. Ознакомьтесь с документацией подмены, чтобы узнать, что именно полифилится.

Передайте --no-deno-shim, чтобы отключить эту возможность, например если вы уже предоставили собственную абстракцию или предполагаете запускать пакет только в Deno-on-npm.

Публикация в npm

›_
deno pack
npm publish ./scope-my-lib-1.0.0.tgz

Типичный процесс выпуска версии:

›_
# 1. Bump the version
deno bump-version patch

# 2. Build the tarball
deno pack

# 3. Verify the contents (extracted view)
tar -tzf scope-my-lib-1.0.0.tgz

# 4. Push to npm
npm publish ./scope-my-lib-1.0.0.tgz

Для выпуска версий в JSR используйте вместо этого deno publish — deno pack предназначена именно для реестра npm.

Поддержка рабочих пространств

В рабочем пространстве команда deno pack выполняется для участника, соответствующего текущей рабочей директории. Чтобы упаковать определённого участника из корневой директории:

›_
cd packages/my-lib
deno pack

Межпространственные зависимости npm: / jsr: в сгенерированном package.json переписываются так, чтобы указывать на опубликованные версии, а не на других участников рабочего пространства. Перед публикацией tarball убедитесь, что эти зависимости выпущены отдельно.

Примеры

Переопределение версии

Полезно для разового выпуска предварительной версии без изменения deno.json:

›_
deno pack --set-version 2.0.0-rc.1

Выбор пути вывода

›_
deno pack --output dist/my-package.tgz

Предварительный просмотр без записи

›_
deno pack --dry-run

--dry-run выводит список того, что попало бы в tarball, не создавая его. Это удобно в CI для проверки правил включения файлов.

Разрешить медленные типы

Медленные типы препятствуют генерации .d.ts. Передайте --allow-slow-types, чтобы всё равно создать пакет; tarball не будет содержать файлы объявлений.

›_
deno pack --allow-slow-types

Не использовать подмену Deno

›_
deno pack --no-deno-shim

Упаковка при изменениях в рабочей директории

›_
deno pack --allow-dirty

По умолчанию deno pack отказывается создавать пакет, если в рабочем дереве Git есть незакоммиченные изменения, чтобы выпуски можно было воспроизвести по хешу коммита.

Исключение файлов

›_
deno pack --ignore=tests/ --ignore='**/*.test.ts'

--ignore принимает шаблоны glob. Чтобы добавить несколько шаблонов, укажите несколько флагов --ignore.

Исключение карт исходного кода

›_
deno pack --no-source-maps

По умолчанию карты исходного кода встраиваются в создаваемые файлы .js. Используйте --no-source-maps, чтобы удалить их: tarball станет меньше, но отлаживать код будет сложнее.

Ограничения

  • Без записей bin. deno pack не формирует поле package.json bin. Публикация библиотек поддерживается; для CLI-инструментов, которым нужен исполняемый файл с шебангом node, по-прежнему требуется самостоятельно подготовить npm-пакет.
  • Без нативных дополнений. Пакеты, связанные с нативным кодом или содержащие этап сборки node-gyp, не поддерживаются.
  • Без .npmignore. Для исключения файлов используйте --ignore; .gitignore учитывается при определении того, что считается частью проекта.
  • Без скриптов жизненного цикла. Хуки prepublishOnly / prepare / postinstall из написанного вручную package.json не запускаются, поскольку package.json генерируется, а не считывается.

Когда использовать deno pack, а когда — deno publish

Задача Используйте
Выпустить версию в JSR deno publish
Выпустить ту же библиотеку в npm deno pack → npm publish ./*.tgz
Охватить пользователей только Node, не требуя настройки JSR deno pack (переписывает для них импорты JSR)

Библиотеку можно опубликовать в обоих реестрах: выпустите версию в JSR с помощью deno publish, затем соберите и отправьте tarball в npm с помощью deno pack для пользователей, которые ещё не перешли на JSR.

См. также

  • deno publish — выпуск версии в JSR
  • deno transpile — этап генерации кода, который deno pack использует внутри
  • deno bump-version — увеличение version в deno.json / package.json перед упаковкой
  • Публикация модулей — обзор площадок, где можно публиковать библиотеки, написанные на Deno
Использование в командной строке:
deno pack [OPTIONS] [files]...

Создание совместимого с npm tarball из проекта Deno

Параметры

--allow-dirty

Разрешить упаковку, если в репозитории есть незакоммиченные изменения.

--allow-slow-types

Пропустить извлечение типов fast-check; файлы .d.ts не будут включены в результат.

--config, -c<FILE>

Настройка различных аспектов deno, включая TypeScript, линтинг и форматирование кода. Обычно файл конфигурации называется deno.json или deno.jsonc и обнаруживается автоматически; в этом случае данный флаг не нужен.

--dry-run

Показать, какие файлы попадут в пакет, не создавая tarball.

--env-file<FILE>необязательно

Загрузить переменные окружения из локального файла. Используется только первая переменная окружения с заданным ключом. Существующие переменные окружения процесса не перезаписываются: если в окружении уже есть переменные с такими же именами, их значения сохраняются. Если в файле .env указано несколько значений одной переменной окружения, применяется первое найденное. Порядок определяется последовательностью файлов, переданных в качестве аргументов.

--ignore<ignore>

Игнорировать файлы, соответствующие этим шаблонам.

--no-config

Отключить автоматическую загрузку файла конфигурации.

--no-source-maps

Не включать карты исходного кода в результат.

--output, -o<FILE>

Путь к выходному файлу (по умолчанию — -.tgz).

--set-version<VERSION>

Переопределить версию в tarball.

Последнее обновление: 20 мая 2026 г.

© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/reference/cli/pack

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API