deno ci
deno ci выполняет воспроизводимую установку для CI-сред, аналогично npm ci. Используйте эту команду в CI-скриптах и Dockerfile, если вам нужна одна команда, которую легко найти и которая гарантированно установит именно то, что указано в файле блокировки, — без расхождений, оставшихся после предыдущих запусков состояний и неожиданностей.
deno ci
Что делает команда
deno ci примерно эквивалентна следующей последовательности:
rm -rf node_modules
deno install --frozen
но обеспечивает более строгую обработку ошибок и понятнее сообщает об их причинах:
-
Требует наличия файла блокировки. Если
deno.lockотсутствует или недоступен для чтения,deno ciзавершится с ошибкой, а не создаст его. Это гарантирует, что при двух запусках для одного и того же коммита будут установлены одни и те же версии. -
Сначала удаляет
node_modules. Перед установкой удаляется любое устаревшее состояние, оставшееся после предыдущего шага CI (или случайно сохранённой установки для разработки), чтобы итоговая структура отражала только разрешённые файлом блокировки зависимости. -
Фиксирует разрешение зависимостей с помощью
--frozen. Еслиdeno.jsonилиpackage.jsonизменён без повторного запускаdeno installдля обновления файла блокировки, команда завершится с ошибкой. Так можно выявить ошибку «обновил версию, но забыл зафиксировать файл блокировки» до того, как она попадёт в production.
Если любая из этих проверок завершится ошибкой, установка не будет запущена.
Когда использовать
| Сценарий | Команда |
|---|---|
| Сборка / тестирование / проверка стиля в CI | deno ci |
| Production-образ Docker | deno ci --prod |
| Локальная разработка (частые изменения) | deno install |
| Добавление или удаление пакета |
deno add / deno remove
|
| Первоначальная настройка (файла блокировки ещё нет) | deno install |
Общее правило: выбирайте deno ci, если установка должна быть воспроизводимой и файл блокировки не должен изменяться. Выбирайте deno install, если вы вносите изменения в зависимости.
Примеры
GitHub Actions
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: denoland/setup-deno@v2
with:
deno-version: v2.x
- run: deno ci
- run: deno test
- run: deno lint
- run: deno fmt --check
Dockerfile для production
FROM denoland/deno:2.8.0
WORKDIR /app
# Copy the manifest files first so install caches well
COPY deno.json deno.lock package.json* ./
RUN deno ci --prod
# Then copy the rest of the source
COPY . .
CMD ["deno", "run", "-A", "main.ts"]
Разделение COPY на этапы «сначала манифесты, затем исходный код» позволяет Docker повторно использовать слой deno ci, пока зависимости не меняются.
Установка для production на хосте
deno ci --prod --skip-types
--prod исключает devDependencies из package.json. --skip-types удаляет пакеты @types/* как из импортов deno.json, так и из зависимостей package.json — это полезно для артефактов развёртывания, где типы увеличивают размер и не нужны во время выполнения.
Распространённые причины ошибок
| Ошибка | Вероятная причина | Решение |
|---|---|---|
| «deno.lock отсутствует» | Файл блокировки не добавлен в коммит. | Запустите deno install локально и добавьте полученный файл deno.lock в коммит. |
| «файл блокировки устарел» | Зависимость добавлена или обновлена в deno.json / package.json, но файл блокировки не обновлён. | Запустите deno install локально и добавьте обновлённый файл deno.lock в коммит. |
| Запросы на подтверждение скриптов сборки в CI без TTY | Новый пакет npm пытается запустить скрипты жизненного цикла, выполнение которых не было разрешено. | Разрешите их локально с помощью deno approve-scripts и добавьте разрешения в коммит. |
См. также
-
deno install— повседневная установка с полным описанием параметров - Непрерывная интеграция — руководство по запуску Deno в GitHub Actions и других CI-системах
-
deno audit— поиск известных уязвимостей в зависимостях; дополняетdeno ciв CI -
deno approve-scripts— управление разрешёнными скриптами жизненного цикла npm
deno ci [OPTIONS]Установите зависимости в чистом и воспроизводимом виде для CI-сред.
Аналогично npm ci: требует наличия файла deno.lock, удаляет существующий каталог node_modules, а затем устанавливает зависимости строго по файлу блокировки. Завершается с ошибкой, если deno.lock отсутствует или не соответствует файлу конфигурации.
deno ci
deno ci --prod
Параметры
--env-file<FILE>необязательный
Загрузить переменные окружения из локального файла. Для каждого ключа используется только первая переменная окружения с таким именем. Существующие переменные окружения процесса не перезаписываются, поэтому их значения сохраняются, если переменные с такими же именами уже заданы в окружении. Если в файле .env есть несколько объявлений одной и той же переменной окружения, применяется первое найденное. Порядок определяется последовательностью файлов, переданных в качестве аргументов.
--prodУстанавливать только production-зависимости (исключая devDependencies).
--skip-typesНе устанавливать пакеты @types/*. Будьте осторожны: используется эвристика на основе имени, поэтому могут быть пропущены пакеты с кодом, необходимым во время выполнения.
Последнее обновление:
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/reference/cli/ci