Начало работы за 20 минут deno

deno
Начало работы за 20 минут deno

Deno официально выпустил 🎉!

Как ни дует и ни унижается снаружи, короче говоря, мулы вытягиваются лошадьми, и только поняв, могут иметь право говорить. Тогда давайте начнем с deno за 20 минут!

Начало

Установить

Ввиду причин скорости внутренней сети,@justjavacБольшой парень сделал внутреннийЗеркальное ускорение:

Mac/Linux

curl -fsSL https://x.deno.js.cn/install.sh | sh

Windows

iwr https://x.deno.js.cn/install.ps1 -useb -outf install.ps1; .\install.ps1
# iwr https://x.deno.js.cn/install.ps1 -useb | iex

Установить переменные среды

У deno нет каталога node_modules в узле в качестве места для хранения пакетов, но ему также нужно место для хранения установленных модулей:

DENO_DIRПо умолчанию$HOME/.deno, который представляет собой путь, по которому Deno хранит сгенерированный код и кэшированный исходный код.

# mac / linux
echo 'export DENO_DIR=$HOME/.deno' >> ~/.bash_profile
source ~/.bash_profile # 如果是 zsh 则:source ~/.zshrc

Установите плагин VSCode

из-заimport urlФорма и глобальные объекты Deno не поддерживаются vscode, поэтому вам нужно использовать плагиныDenoПоддерживать:

Примечание. Вам необходимо установить для deno.enabled значение true в настройках.

Перед установкой:

YUbgts.png

После установки:

YUbw1P.png

hello world

deno run https://deno.land/std/examples/welcome.ts

Если ничего другого, вы увидите:

Download https://deno.land/std/examples/welcome.ts
Compile https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕

Если вы сделаете это снова, вы увидитеDownloadа такжеCompileПроцесс ушел, а результат прямо:

Welcome to Deno 🦕

глубоко

Использование встроенного API Deno

Сначала давайте рассмотрим пример чтения каталога файлов:

const dir = Deno.readDirSync(Deno.cwd())
for (const file of dir) {
	console.log(file)
}

Смысл этого кода:Deno.cwd()представляет текущий каталог,Deno.readDirSyncПредставляет чтение информации о каталоге и возвращает итерируемый объект, мы используемfor ofдля вывода. Выполните команду, чтобы увидеть результат:

deno run --allow-read mod.ts

Прежде всего, мы видим, что deno не использует метод импорта модулей, как node, а использует глобальныйDenoобъект, мы можем увидеть все встроенные API, выведя:

console.log(Deno);

Мы используем плагин vscode, чтобы щелкнуть объект Deno, чтобы перейти к его определению ts:

YUqtDU.gif

Если вы чувствуете, что не понимаете английский, вы можете обратиться к или заменитьКитайская версия.

Если он все еще недостаточно интуитивно понятен, вы можете обратиться к typedoc:китайский языкилианглийский

Поддержка ТС

В Deno и TS, и JS являются первоклассными гражданами, и оба прекрасно поддерживаются. Например:

// index.ts
let name: string = 'ry'
name = 123
> deno run index.ts

результат

Compile file:///Users/zhangchaojie/Desktop/demo/index.ts
error: TS2322 [ERROR]: Type '123' is not assignable to type 'string'.
name = 123;
~~~~
    at file:///Users/zhangchaojie/Desktop/demo/index.ts:2:1

разрешение

По умолчанию у Deno нет разрешений на сеть, чтение файлов, запись файлов, чтение переменных окружения и т. д. Нужно отобразить, например:

// index.js
// 获取数据
fetch('http://jsonplaceholder.typicode.com/posts/1')
.then((res) => res.json())
.then((data) => {
	console.log(data)
})
deno run index.js

После выполнения был обнаружен ряд ошибок:

error: Uncaught PermissionDenied: network access to "http://jsonplaceholder.typicode.com/posts/1", run again with the --allow-net flag

Попробуем добавить разрешения:

deno run --allow-net index.js
{
 userId: 1,
 id: 1,
 title: "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
 body: "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas..."
}

Если вы находите это хлопотным, вы можете использовать-AПараметр разрешает полные разрешения.

import URL

Одним из основных преимуществ Deno по сравнению с NodeJS является отсутствиеnode_modules,нетpackage.json, ссылки на сторонние модули в виде URL-адресов импорта:

import { white, bgRed } from "https://deno.land/std/fmt/colors.ts";

console.log(bgRed(white("你好,世界")));
deno run --allow-net mod.ts 
Compile file:///Users/zhangchaojie/Desktop/demo/mod.ts
Download https://deno.land/std/fmt/colors.ts
你好,世界 # 假装有颜色

Хотя это кажется простым, вы найдете много проблем, если будете осторожны:

1. иметьCompileа такжеDownloadпроцесс, медленный?

Фактически, его нужно загрузить только при первом запуске, а затем он будет кэширован.Если вы запустите его снова, вы обнаружите, что скорость все еще очень высока:

deno run mod.ts
你好,世界 # 假装有颜色

2. Что делать, если нет сети?

Как упоминалось выше, после первой загрузки Deno будет кэшировать ее, а конкретный каталог кэша — это переменная среды, которую мы установили ранее.$HOME/.deno, мы можем использоватьtreeВзгляните на команду:

tree $HOME/.deno
/Users/zhangchaojie/.deno
├── deps
│   └── https
│       └── deno.land
│           ├── 3574883d8acbaf00e28990ec8e83d71084c4c668c1dc7794be25208c60cfc935
│           └── 3574883d8acbaf00e28990ec8e83d71084c4c668c1dc7794be25208c60cfc935.metadata.json
└── gen
    # ...

13 directories, 8 files

Если нам нужно развернуть код в среде без доступа к внешней сети, мы можем напрямую скопировать содержимое этого каталога в соответствующий каталог и указать переменную среды в каталоге.

Конечно, если вы устанавливаете зависимости от сторонних зависимостей, напримерhttps://deno.landЕсли он падает, он может быть только GG, нет возможности (PS: вероятность очень маленькая, как NPMJS.com не может установить пакет).

3. Как обновить зависимости?

Если зависимые файлы обновлены, мы можем пройти--reloadкоманду для обновления, вы также можете передатьбелый список, который обновляет только некоторые зависимости:

deno run --reload=https://deno.land mod.ts

Асинхронная операция возвращает Promise

Все асинхронные операции в Deno возвращают объекты Promise и поддерживаютtop-level-await,Например:

const file = await Deno.create("./foo.txt");
console.log(file);

Стандартный модуль

Deno предоставляет разработчикам практичную высокочастотную библиотеку разработки без внешних зависимостей, что снижает нагрузку на нашу разработку:

  • node: модуль, совместимый с Node API;
  • io: двоичные операции чтения и записи;
  • http: связанные с сетью и веб-сервисами;
  • path: связанный путь к файлу;
  • colors: вывод цветного текста, похожего на библиотеку мела;
  • printf: форматированный вывод, аналогичный printf в языке C;
  • tar: декомпрессия и компрессия;
  • async: создать асинхронную функцию;
  • bytes: бинарное сравнение и поиск и т.д.;
  • datetime: связанные с датой;
  • encoding: преобразование текста и двоичных файлов, преобразование CSV и объектов, преобразование yarml и объектов и т. д.;
  • flags: разбор параметров командной строки;
  • hash: символ для sha1 и sha256;
  • fs: модуль файловой системы, аналогичный модулю fs узла;
  • log: управление журналом;
  • permissions: связанные с разрешением;
  • testing: связанные с тестами и утверждениями;
  • uuid: используется для генерации UUID;
  • ws: связанный с WebSocket;

Эта библиотека будет постоянно улучшаться и расширяться в соответствии с реальными потребностями, и вы также можете внести свой вклад.

Встроенные инструменты

Основываясь на идее разработки зависимостей, Deno предоставляет набор практических инструментов:

  • пакет deno: файлы в комплекте
  • deno fmt: формат
  • deno lint: проверка кода (еще не реализовано)
  • дено тест: тест

deno bundle:

Вы можете понять то же самое, что и файлы упаковки webpack:

// foo.js
const obj = { name: 'foo' }
export default obj
# 打包
deno bundle foo.js foo.bundle.js
// index.js 引入打包后的文件
import foo from './foo.bundle.js'
console.log(foo)
deno run index.js
{ name: "foo" }

deno fmt:

Вы можете понять это как функцию Prettier:

# 创建一个文件
# 注意左侧有空格
echo "console.log( 'foo')" > index.js
# 格式化
deno fmt index.js
# 查看文件
cat index.js
console.log("foo"); # 左侧空格没了 😊

deno test: Вы можете понять это как функцию Jest:

// 引入断言模块
import { assertEquals } from "https://deno.land/std/testing/asserts.ts";

Deno.test("hello test", () => {
  const x = 'hello' + ' test';
  assertEquals(x, 'hello test');
});

обучение и информация