Переход с npm
npm — это менеджер пакетов, а не среда выполнения, поэтому большая часть того, что вы «переносите», — это конфигурация, а не код. Deno полностью совместим с package.json: он читает существующий манифест, устанавливает и разрешает те же npm-зависимости и запускает ваши скрипты. В большинстве случаев достаточно указать Deno на существующий проект npm — и всё заработает.
Для начала вам не нужно менять среду выполнения. Самый простой шаг — использовать Deno исключительно как более быстрый и безопасный менеджер пакетов для приложения, которое вы по-прежнему запускаете с Node: deno install читает ваш package.json, разрешает те же пакеты и создаёт обычный каталог node_modules, поэтому приложение продолжает работать в Node точно так же, как и раньше. Затем вы можете запускать скрипты package.json с помощью deno task и перейти на другую среду выполнения, когда будете готовы. Переход также можно отменить: если вас что-то не устроит, удалите deno.lock и снова запустите npm install.
Запуск проекта
Установите зависимости и запустите точку входа:
cd my-npm-app
deno install
deno run main.js
deno install читает существующий package.json и разрешает те же npm-пакеты, например npm install. Он создаёт каталог node_modules и собственный deno.lock.
При первом запуске deno install, если deno.lock ещё нет, Deno создаёт его на основе существующего package-lock.json: закреплённые версии и хеши целостности переносятся без изменений, поэтому при переходе не произойдёт неожиданного обновления пакетов. После этого Deno поддерживает deno.lock и не изменяет package-lock.json, так что это не затронет коллег, которые ещё не перешли на Deno. Добавьте deno.lock в систему контроля версий, когда убедитесь, что всё работает.
Скрипты, определённые в package.json, запускаются с помощью deno task — аналога npm run:
deno task start
Если вы также переходите с запуска приложения на Node на запуск в Deno, сразу заметите одно отличие: по умолчанию Deno работает в песочнице. При первом обращении программы к сети, файловой системе или окружению Deno запросит разрешение. Чтобы поведение соответствовало Node, сразу предоставьте все разрешения с помощью deno run -A main.js, а затем при необходимости ограничьте их флагами. См. раздел Безопасность и разрешения.
Краткая справка по переходу с npm на Deno
Зависимости
| npm | Deno |
|---|---|
npm install | deno install |
npm install <pkg> | deno add <pkg> |
npm install -D <pkg> | deno add -D <pkg> |
npm uninstall <pkg> | deno remove <pkg> |
npm update | deno update |
npm outdated | deno outdated |
npm ci | deno ci |
npm audit | deno audit |
npm explain <pkg> | deno why <pkg> |
Запуск и выполнение
| npm | Deno |
|---|---|
node file.js | deno file.js |
npm run <script> | deno task <script> |
npx <pkg> | dx <pkg> |
Deno также включает форматтер и линтер, поэтому deno fmt и deno lint заменяют Prettier и ESLint без дополнительных зависимостей.
Рабочие пространства
npm хранит шаблоны рабочих пространств в package.json внутри workspaces, и Deno считывает это поле напрямую. Монорепозиторий, например, будет работать без изменений:
{
"workspaces": ["packages/*"]
}
Пакеты ссылаются друг на друга через протокол workspace: в своих зависимостях package.json — точно так же, как в npm. Ничего преобразовывать не нужно. О том, как работает разрешение зависимостей, см. раздел Рабочие пространства.
На что обратить внимание
-
Скрипты жизненного цикла по умолчанию не запускаются. Если зависимость использует скрипт
installилиpostinstall(собственные дополнения, сборкиnode-gyp), разрешите его для конкретного пакета с помощьюdeno install --allow-scripts=npm:<pkg>или управляйте разрешениями с помощьюdeno approve-scripts. Это настройка безопасности по умолчанию, а не отсутствие функции. -
overrides. Закрепляйте транзитивную зависимость с помощью записи в карте импортов, а не поляoverridesвpackage.json. -
Структура node_modules. По умолчанию Deno использует изолированную структуру, похожую на pnpm: реальные файлы находятся в
node_modules/.deno/, а пакеты доступны через символические ссылки. Инструменты, которым нужна плоская структура npm с подъёмом зависимостей, могут включить её с помощью"nodeModulesDir": "manual"и"nodeModulesLinker": "hoisted"вdeno.json. См. справочник по каталогу node_modules.
Что дальше
- Переход с Node.js. Если вы также меняете среду выполнения, здесь описаны CommonJS, разрешение ES-модулей и встроенные модули Node, поддерживаемые Deno.
- Переход с pnpm и переход с Yarn. Те же команды Deno с пояснениями о формате рабочих пространств каждого инструмента.
-
Управление зависимостями. Подробное описание npm, JSR и рабочих процессов
package.json. -
Управление цепочкой поставок.
deno audit, работа с lock-файлом и минимальный возраст зависимостей.
Последнее обновление:
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/migrate/migrate_from_npm