Spec-Zone.ru › Deno 2

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 из стандартной библиотеки в вашем проекте, вы можете использовать этот импорт-мап:

deno.json
{
  "imports": {
    "@std/assert": "jsr:@std/assert@^1.0.0",
    "chalk": "npm:chalk@5"
  }
}

Затем ваш скрипт может использовать простой спецификатор std/assert:

script.ts
import { assertEquals } from "@std/assert";
import chalk from "chalk";

assertEquals(1, 2);
console.log(chalk.yellow("Hello world"));

Вы также можете использовать поле "dependencies" в файле package.json:

package.json
{
  "dependencies": {
    "express": "express@^1.0.0"
  }
}
script.ts
import express from "express";

const app = express();

Обратите внимание, что это потребует запуска deno install.

Подробнее о импортах и зависимостях модулей

Пользовательские сопоставления путей

Карта импортов в deno.json может быть использована для более общих сопоставлений путей спецификаторов. Вы можете сопоставить точный спецификатор с модулем третьей стороны или файлом напрямую, или сопоставить часть спецификатора импорта с директорией.

deno.jsonc
{
  "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";

Сопоставление путей импортируемых спецификаторов часто используется в больших кодовых базах для краткости.

Для использования корневой директории проекта для абсолютных импортов:

deno.json
{
  "imports": {
    "/": "./",
    "./": "./"
  }
}
main.ts
import { MyUtil } from "/util.ts";

Это приводит к тому, что спецификаторы импорта, начинающиеся с / , разрешаются относительно URL-адреса или пути к файлу карты импорта.

Задачи

Поле tasks в вашем файле deno.json используется для определения пользовательских команд, которые могут быть выполнены с помощью команды deno task и позволяет настраивать команды и разрешения в соответствии со специфическими потребностями вашего проекта.

Это аналогично полю scripts в файле package.json, которое также поддерживается.

deno.json
{
  "tasks": {
    "start": "deno run --allow-net --watch=static/,routes/,data/ dev.ts",
    "test": "deno test --allow-net",
    "lint": "deno lint"
  }
}
package.json
{
  "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. Это позволяет указать, какие файлы включать или исключать из линтинга, а также настроить правила линтинга в соответствии с потребностями вашего проекта.

Например:

deno.json
{
  "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. Это позволяет настроить форматирование кода, обеспечивая согласованность в проекте, делая его более читаемым и удобным для совместной работы. Вот основные параметры, которые можно настроить:

deno.json
{
  "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 использует для обеспечения целостности зависимостей. Файл блокировки записывает точные версии и хеши целостности модулей, от которых зависит ваш проект, гарантируя, что при каждом запуске проекта используются те же версии, даже если зависимости обновлены или изменены удаленно.

deno.json
{
  "lock": {
    "path": "./deno.lock",
    "frozen": true
  }
}

Эта конфигурация:

  • устанавливает расположение файла блокировки в ./deno.lock (это значение по умолчанию и может быть опущено)
  • сообщает Deno, что вы хотите получить ошибку, если какие-либо зависимости изменятся

Deno использует файл блокировки по умолчанию, вы можете отключить его с помощью следующей конфигурации:

deno.json
{
  "lock": false
}

Директория Node modules

По умолчанию Deno использует локальную директорию node_modules , если в вашей директории проекта есть файл package.json.

Вы можете контролировать это поведение, используя поле nodeModulesDir в файле deno.json.

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 компилируется, обеспечивая соответствие требованиям и стандартам кодирования вашего проекта.

Info

Deno рекомендует использовать конфигурацию TypeScript по умолчанию. Это поможет при совместном использовании кода.

См. также Настройка TypeScript в Deno.

Нестабильные функции

Поле unstable в файле deno.json используется для включения определенных нестабильных функций для вашего проекта Deno.

Эти функции все еще находятся в разработке и пока не являются частью стабильного API. Перечисление функций в массиве unstable позволяет экспериментировать с этими новыми возможностями до их официального выпуска.

deno.json
{
  "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:

.gitignore
dist/
.env
deno.json
{
  "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

Spec-Zone.ru

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