Deno - это новая среда выполнения на стороне сервера для запуска приложений JavaScript и TypeScript.

В этой статье мы рассмотрим, как начать разработку приложений для Deno.

Интерфейс командной строки

Мы можем получить помощь, запустив:

deno help

or:

deno -h

для краткости.

Мы также можем написать:

deno --help

сделать то же самое.

Аргументы скрипта

Мы можем получить аргументы командной строки в нашем скрипте с помощью свойства Deno.args.

Например, мы можем написать:

index.ts

console.log(Deno.args);

Затем, когда мы бежим:

deno run index.ts a b -c --quiet

Мы получаем:

[ "a", "b", "-c", "--quiet" ]

из вывода консоли.

Разрешения

Разрешение требуется для запуска кода, требующего доступа к различным ресурсам.

По умолчанию они должны быть включены специально.

Доступны следующие разрешения:

  • _3 _, _ 4_ - Разрешить все разрешения. Это отключает всю безопасность.
  • — allow-env - Разрешить доступ к среде для таких вещей, как получение и установка переменных среды.
  • — allow-hrtime — Разрешить измерение времени с высоким разрешением. Время с высоким разрешением можно использовать для тайминговых атак и снятия отпечатков пальцев.
  • — allow-net=<url> - Разрешить доступ к сети. Мы можем указать необязательный список доменов, разделенных запятыми, чтобы предоставить список разрешенных доменов.
  • — allow-plugin — Разрешить загрузку плагинов. Обратите внимание: - allow-plugin - это нестабильная функция.
  • — allow-read=<allow-read> — Разрешить файловой системе доступ на чтение. Мы можем указать необязательный, разделенный запятыми список каталогов или файлов, чтобы предоставить список разрешенных доступа к файловой системе.
  • — allow-run — Разрешить выполнение подпроцессов. Имейте в виду, что подпроцессы не запускаются в изолированной программной среде и, следовательно, не имеют тех же ограничений безопасности, что и процесс Deno. Поэтому используйте с осторожностью.
  • — allow-write=<allow-write> — Разрешить файловой системе доступ на запись. Вы можете указать необязательный список каталогов или файлов, разделенных запятыми, чтобы предоставить список разрешенных разрешений доступа к файловой системе.

Например, если у нас есть программа, которая выполняет HTTP-запросы вроде:

const [url] = Deno.args;
const res = await fetch(url);
const body = new Uint8Array(await res.arrayBuffer());
await Deno.stdout.write(body);

Мы запускаем его с помощью:

deno run --allow-net index.ts https://yesno.wtf/api

разрешить программе доступ в Интернет.

API разрешений

Мы можем запросить разрешения формы, используя метод Deno.permissions.query с объектом, у которого есть разрешения, которые мы хотим запросить.

Например, мы можем написать:

index.ts

const desc1 = { name: "read", path: "/foo" } as const;
console.log(await Deno.permissions.query(desc1));
const desc2 = { name: "read", path: "/foo/bar" } as const;
console.log(await Deno.permissions.query(desc2));
const desc3 = { name: "read", path: "/bar" } as const;
console.log(await Deno.permissions.query(desc3));

Затем, когда мы бежим:

deno run --unstable index.ts

Мы видим:

PermissionStatus { state: "prompt" }
PermissionStatus { state: "prompt" }
PermissionStatus { state: "prompt" }

зашел в консоль.

Нам нужна опция --unstable, чтобы сделать Deno.permissions.query метод доступным.

Мы можем отозвать разрешения, используя метод Deno.permissions.revoke:

const desc = { name: "read", path: "/foo/bar" } as const;
console.log(await Deno.permissions.revoke(desc));
const strongDesc = { name: "read", path: "/foo" } as const;
await Deno.permissions.revoke(strongDesc);

Тогда получаем:

PermissionStatus { state: "prompt" }

отображается.

Заключение

Мы можем получить и установить разрешения с помощью Deno.

И мы можем легко получить аргументы командной строки в наших сценариях.

Понравилась эта статья? Если да, то получите больше похожего контента, подписавшись на наш канал YouTube!