deno.json и package.json
Вы можете настроить Deno, используя файл deno.json. Этот файл можно использовать для настройки компилятора TypeScript, линтера, форматировщика и других инструментов Deno.
Файл конфигурации поддерживает .json и .jsonc расширения.
Deno автоматически обнаружит файл конфигурации deno.json или deno.jsonc, если он находится в вашей текущей рабочей директории или родительских директориях. Флаг --config можно использовать для указания другого файла конфигурации.
Поддержка package.json
Deno также поддерживает файл package.json для совместимости с проектами Node.js. Если у вас есть проект Node.js, нет необходимости создавать файл deno.json. Deno будет использовать файл package.json для настройки проекта.
Если оба файла deno.json и package.json присутствуют в одной директории, Deno будет понимать зависимости, указанные в обоих deno.json и package.json; и использовать файл deno.json для Deno-специфических настроек. Подробнее о совместимости Node в Deno.
Зависимости
Поле "imports" в вашем файле deno.json позволяет указать зависимости, используемые в вашем проекте. Вы можете использовать его для сопоставления простых спецификаторов с URL-адресами или путями к файлам, что упрощает управление зависимостями и разрешение модулей в ваших приложениях.
Например, если вы хотите использовать модуль assert из стандартной библиотеки в вашем проекте, вы можете использовать этот импорт-мап:
{
"imports": {
"@std/assert": "jsr:@std/assert@^1.0.0",
"chalk": "npm:chalk@5"
}
}
Затем ваш скрипт может использовать простой спецификатор std/assert:
import { assertEquals } from "@std/assert";
import chalk from "chalk";
assertEquals(1, 2);
console.log(chalk.yellow("Hello world"));
Вы также можете использовать поле "dependencies" в файле package.json:
{
"dependencies": {
"express": "express@^1.0.0"
}
}
import express from "express";
const app = express();
Обратите внимание, что это потребует запуска deno install.
Подробнее о импортах и зависимостях модулей
Пользовательские сопоставления путей
Карта импортов в deno.json может быть использована для более общих сопоставлений путей спецификаторов. Вы можете сопоставить точный спецификатор с модулем третьей стороны или файлом напрямую, или сопоставить часть спецификатора импорта с директорией.
{
"imports": {
// Map to an exact file
"foo": "./some/long/path/foo.ts",
// Map to a directory, usage: "bar/file.ts"
"bar/": "./some/folder/bar/"
}
}
Использование:
import * as foo from "foo";
import * as bar from "bar/file.ts";
Сопоставление путей импортируемых спецификаторов часто используется в больших кодовых базах для краткости.
Для использования корневой директории проекта для абсолютных импортов:
{
"imports": {
"/": "./",
"./": "./"
}
}
import { MyUtil } from "/util.ts";
Это приводит к тому, что спецификаторы импорта, начинающиеся с / , разрешаются относительно URL-адреса или пути к файлу карты импорта.
Задачи
Поле tasks в вашем файле deno.json используется для определения пользовательских команд, которые могут быть выполнены с помощью команды deno task и позволяет настраивать команды и разрешения в соответствии со специфическими потребностями вашего проекта.
Это аналогично полю scripts в файле package.json, которое также поддерживается.
{
"tasks": {
"start": "deno run --allow-net --watch=static/,routes/,data/ dev.ts",
"test": "deno test --allow-net",
"lint": "deno lint"
}
}
{
"scripts": {
"dev": "vite dev",
"build": "vite build"
}
}
Для выполнения задачи используйте команду deno task , за которой следует имя задачи. Например:
deno task start
deno task test
deno task lint
deno task dev
deno task build
Подробнее о deno task.
Линтер
Поле lint в файле deno.json используется для настройки поведения встроенного линтера Deno. Это позволяет указать, какие файлы включать или исключать из линтинга, а также настроить правила линтинга в соответствии с потребностями вашего проекта.
Например:
{
"lint": {
"include": ["src/"],
"exclude": ["src/testdata/", "src/fixtures/**/*.ts"],
"rules": {
"tags": ["recommended"],
"include": ["ban-untagged-todo"],
"exclude": ["no-unused-vars"]
}
}
}
Эта конфигурация:
- будет линтировать только файлы в директории
src/, - не будет линтировать файлы в директории
src/testdata/или любые файлы TypeScript в директорииsrc/fixtures/. - указывает на применение рекомендуемых правил линтинга,
- добавляет правило
ban-untagged-todo, - исключает правило
no-unused-vars.
Полный список доступных правил линтинга можно найти в документации по линтингу Deno.
Подробнее о линтинге с Deno.
Форматирование
Поле fmt в файле deno.json используется для настройки поведения встроенного форматировщика кода Deno. Это позволяет настроить форматирование кода, обеспечивая согласованность в проекте, делая его более читаемым и удобным для совместной работы. Вот основные параметры, которые можно настроить:
{
"fmt": {
"useTabs": true,
"lineWidth": 80,
"indentWidth": 4,
"semiColons": true,
"singleQuote": true,
"proseWrap": "preserve",
"include": ["src/"],
"exclude": ["src/testdata/", "src/fixtures/**/*.ts"]
}
}
Эта конфигурация:
- использует табуляцию вместо пробелов для отступов,
- ограничивает строки 80 символами,
- использует ширину отступа в 4 пробела,
- добавляет точки с запятой в конце операторов,
- использует одинарные кавычки для строк,
- сохраняет форматирование абзацев,
- форматирует файлы в директории
src/, - исключает файлы в директории
src/testdata/и любые файлы TypeScript в директорииsrc/fixtures/.
Подробнее о форматировании кода с помощью Deno.
Файл блокировки
Поле lock в файле deno.json используется для указания конфигурации файла блокировки, который Deno использует для обеспечения целостности зависимостей. Файл блокировки записывает точные версии и хеши целостности модулей, от которых зависит ваш проект, гарантируя, что при каждом запуске проекта используются те же версии, даже если зависимости обновлены или изменены удаленно.
{
"lock": {
"path": "./deno.lock",
"frozen": true
}
}
Эта конфигурация:
- устанавливает расположение файла блокировки в
./deno.lock(это значение по умолчанию и может быть опущено) - сообщает Deno, что вы хотите получить ошибку, если какие-либо зависимости изменятся
Deno использует файл блокировки по умолчанию, вы можете отключить его с помощью следующей конфигурации:
{
"lock": false
}
Директория Node modules
По умолчанию Deno использует локальную директорию node_modules , если в вашей директории проекта есть файл package.json.
Вы можете контролировать это поведение, используя поле nodeModulesDir в файле deno.json.
{
"nodeModulesDir": "auto"
}
Вы можете установить это поле в следующие значения:
| Значение | Поведение |
|---|---|
"none" | Не использовать локальную директорию node_modules. Вместо этого использовать глобальный кэш в $DENO_DIR, который автоматически обновляется Deno. |
"auto" | Использовать локальную директорию node_modules. Директория автоматически создается и обновляется Deno. |
"manual" | Использовать локальную директорию node_modules. Пользователь должен вручную обновлять эту директорию, например, с помощью deno install или npm install. |
Указывать это значение не обязательно, применяются следующие значения по умолчанию:
-
"none"если в вашей директории проекта нет файлаpackage.json -
"manual"если в вашей директории проекта есть файлpackage.json
При использовании пространств имен это значение можно использовать только в корневом пространстве имен. Указание его в любом из членов приведет к предупреждениям. Настройка "manual" будет применяться автоматически только в том случае, если в корневом пространстве имен есть файл package.json.
Параметры компилятора TypeScript
Поле compilerOptions в файле deno.json используется для настройки параметров компилятора TypeScript для вашего проекта Deno. Это позволяет настроить, как код TypeScript компилируется, обеспечивая соответствие требованиям и стандартам кодирования вашего проекта.
Deno рекомендует использовать конфигурацию TypeScript по умолчанию. Это поможет при совместном использовании кода.
См. также Настройка TypeScript в Deno.
Нестабильные функции
Поле unstable в файле deno.json используется для включения определенных нестабильных функций для вашего проекта Deno.
Эти функции все еще находятся в разработке и пока не являются частью стабильного API. Перечисление функций в массиве unstable позволяет экспериментировать с этими новыми возможностями до их официального выпуска.
{
"unstable": ["cron", "kv", "webgpu"]
}
include и exclude
Многие конфигурации (например, lint, fmt) имеют свойства include и exclude для указания файлов для включения.
include
Включаться будут только пути или шаблоны, указанные здесь.
{
"lint": {
// only format the src/ directory
"include": ["src/"]
}
}
exclude
Пути или шаблоны, указанные здесь, будут исключены.
{
"lint": {
// don't lint the dist/ folder
"exclude": ["dist/"]
}
}
Это имеет БОЛЬШЕ приоритета, чем include и победит include, если путь совпадает как в include, так и в exclude.
Вы можете захотеть исключить директорию, но включить поддиректорию. В Deno 1.41.2+ вы можете исключить более конкретный путь, указав отрицательное соответствие по шаблону ниже более общего исключения:
{
"fmt": {
// don't format the "fixtures" directory,
// but do format "fixtures/scripts"
"exclude": [
"fixtures",
"!fixtures/scripts"
]
}
}
Исключение верхнего уровня
Если есть каталог, который вы никогда не хотите, чтобы Deno форматировал, проверял на наличие ошибок, проверял типы или анализировал в LSP и т. д., укажите его в массиве исключений верхнего уровня:
{
"exclude": [
// exclude the dist folder from all sub-commands and the LSP
"dist/"
]
}
Иногда вы можете захотеть исключить путь или шаблон, который исключён в списке исключений верхнего уровня. В Deno 1.41.2+ вы можете исключить путь, указав отрицательный шаблон glob в более конкретной конфигурации:
{
"fmt": {
"exclude": [
// format the dist folder even though it's
// excluded at the top level
"!dist"
]
},
"exclude": [
"dist/"
]
}
Опубликовать - переопределить .gitignore
Конфигурация .gitignore учитывается для команды deno publish. В Deno 1.41.2+ вы можете отказаться от исключённых файлов, игнорируемых в .gitignore, используя отрицательный шаблон glob:
dist/
.env
{
"publish": {
"exclude": [
// include the .gitignored dist folder
"!dist/"
]
}
}
В качестве альтернативы, явное указание путей, игнорируемых в gitignore, в "include" также работает:
{
"publish": {
"include": [
"dist/",
"README.md",
"deno.json"
]
}
}
Полный пример
{
"compilerOptions": {
"allowJs": true,
"lib": ["deno.window"],
"strict": true
},
"lint": {
"include": ["src/"],
"exclude": ["src/testdata/", "src/fixtures/**/*.ts"],
"rules": {
"tags": ["recommended"],
"include": ["ban-untagged-todo"],
"exclude": ["no-unused-vars"]
}
},
"fmt": {
"useTabs": true,
"lineWidth": 80,
"indentWidth": 4,
"semiColons": false,
"singleQuote": true,
"proseWrap": "preserve",
"include": ["src/"],
"exclude": ["src/testdata/", "src/fixtures/**/*.ts"]
},
"lock": false,
"nodeModulesDir": "auto",
"unstable": ["webgpu"],
"test": {
"include": ["src/"],
"exclude": ["src/testdata/", "src/fixtures/**/*.ts"]
},
"tasks": {
"start": "deno run --allow-read main.ts"
},
"imports": {
"oak": "jsr:@oak/oak"
},
"exclude": [
"dist/"
]
}
Схема JSON
Для редакторов доступен файл схемы JSON для автодополнения. Файл версионирован и доступен по адресу: https://deno.land/x/deno/cli/schemas/config-file.v1.json
Прокси
Deno поддерживает прокси для загрузки модулей и API fetch. Настройка прокси считывается из переменных среды: HTTP_PROXY, HTTPS_PROXY и NO_PROXY.
Если вы используете Windows — если переменные среды не найдены, Deno обращается к прокси из реестра.
© 2018–2024 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/fundamentals/configuration