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 в настройках.
Перед установкой:
После установки:
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:
Если вы чувствуете, что не понимаете английский, вы можете обратиться к или заменитьКитайская версия.
Если он все еще недостаточно интуитивно понятен, вы можете обратиться к 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');
});
обучение и информация
- Официальный сайт: Достоверная информация из первых рук;
- Документация по началу работы: От начала до понимания;
- стандартный модуль: источник всех вещей;
- сторонние модули: собрание талантов;
- Ускорение внутренней установки: Попрощайтесь с медленной установкой;
- китайское руководство: Евангелие сонных на английском языке;
- ТС определение китайский: То же, что и выше, определение ts объясняется на китайском языке.