С момента выхода deno 1.0 было много статей о deno, в большинстве из которых обсуждается как установить deno, каковы характеристики deno, в чем сходство и различие между deno и node, является ли deno заменой node , так далее. Мы не будем обсуждать это сегодня, ведь Talk стоит дешево, покажите мне код! Испытайте острые ощущения от разработки deno и используйте deno для создания приложения «уровня предприятия»:deno-supermarket, разве это не ароматно?
Некоторые общие ямы в дено
Перед самим боем позвольте мне представить несколько ям, с которыми я столкнулся, когда впервые столкнулся с дено.
Проблема с расположением маркера разрешения
Все мы знаем, что deno по умолчанию безопасен, а это значит, что доступ к сети, чтение и запись файлов и т. д. по умолчанию запрещены. Например, есть файл index.ts со следующим содержимым:
import { serve } from "https://deno.land/std@0.50.0/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
req.respond({ body: "Hello World\n" });
}
Если выполняется напрямуюdeno run index.ts
, сообщит об ошибке:
error: Uncaught PermissionDenied: network access to "0.0.0.0:8000", run again with the --allow-net flag
Так что мы естественно добавим в конце команды запуска--allow-net
,следующим образом:
deno run index.ts --allow-net
Однако это все равно выдает ошибку. Я проверил данные, чтобы узнать,--allow-net
,--allow-read
Такие флаги нельзя ставить после имени файла, за ними сразу должен следоватьdeno run
Позже, например, верно следующее:
deno run --alow-net index.ts
Почему нельзя изменить позицию? Ответ на этот вопрос заключается в том, что если--allow-net
После имени файла оно передается скрипту js, а не deno. Чтобы узнать больше, см. этоconfused by order of cli option flags. В любом случае, помните одно: флаг разрешения должен следоватьdeno run
Позади!
Поскольку большинство наших фронтенд-студентов редко пишут предысторию, они не очень хорошо понимают важность безопасности.Чтобы избежать различных проблем с правами доступа, я предлагаю при написании некоторых практических проектов использоватьdeno run -A
чтобы включить все разрешения. (Это только для отладки, и его следует использовать с осторожностью в производственной среде!)
нестабильный API
Поскольку в реальном боевом процессе используется mongodb, необходимо внедрить сторонний модуль Denomongo, однако при запуске проекта будет сообщено об ошибке:
error: TS2339 [ERROR]: Property 'openPlugin' does not exist on type 'typeof Deno'.
Я проверил и обнаружил, что это было потому, чтоopenPlugin
Этот метод в настоящее время не является стабильным. По умолчанию deno предоставляет только стабильный API. Если вам нужно включить нестабильный API, вы можете добавить--stable
логотип. Например:
deno run -A --unstable index.ts
Кто-то может спросить,-A
а также--unstable
Не будет ли проблем со сменой положения. Проверил этот без проблем. Пока идентификатор предшествует имени файла, он будет работать.
Существует, в конце концов, что такое стабильный API, что такое нестабильный API? На самом деле, официальные документы deno помогли нам разобраться, адрес входа:
если ты сомневаешься--unstable
, вы можете использовать следующий метод для распечаткиDeno
Все участники на:
console.log(Object.keys(Deno).length)
использоватьdeno run --unstable index.ts
Результат вывода 117, используяdeno run index.ts
Результат вывода 88 . Это показывает, что существует 88 стабильных API и 29 нестабильных API.
Несколько советов по использованию deno
Переход с узла на deno также изменит наше мышление в области разработки. Итак, давайте взглянем на некоторые навыки разработки deno, которые отличаются от node.
Как управлять версиями?
Сначала я тоже очень растерялся: не болееpackage.json
, Как контролировать версию каждой зависимости? Например, у нас есть 10 файлов, которые все зависят отmongo@v0.0.6
, то каждый файл импортируется со следующим кодом:
import { init, MongoClient } from 'https://deno.land/x/mongo@v0.6.0/mod.ts'
Но однажды я вдруг захотел обновить 0.6.0 до 0.7.0, что мне делать? Легко пропустить замену файлов по одному, конечно, можно и глобально искать и заменять пачками. Но эта эффективность не очень высока.
Официальная рекомендация - использоватьdeps.ts
файл для импорта удаленных файлов и управления версиями. (Конечно, имя файла не обязательно должно называтьсяdeps.ts
, вы можете изменить его на другое имя). Конкретный метод заключается в том, чтобы поместить все удаленные зависимости, используемые вdeps.ts
введено в , иRe-export
означает экспортировать каждую зависимость, затем другие файлы могут быть загружены изdeps.ts
получить необходимые зависимости.
Возвращаясь к тому, что все 10 файлов зависят отmongo
проблема, если изменить наdeps.ts
Файл для единого управления выглядит так:
export * from 'https://deno.land/x/mongo@v0.6.0/mod.ts'
Тогда те файлы, которые нужно использовать монго, нужно импортировать не напрямую с пульта, а изdeps.ts
импортируется следующим образом:
import { init, MongoClient } from '../pathTo/deps.ts';
Если нам нужно обновить, мы можем напрямую поставитьdeps.ts
Внутри адреса Mongo в0.6.0
изменить на0.7.0
Вот и все.
Кроме того, один момент, похожий на npm, заключается в том, что если номер версии не указан, то есть в удаленном адресе не указана версия, например:
export * from 'https://deno.land/x/mongo/mod.ts'
Последняя версия зависимостей будет установлена по умолчанию.
Как найти библиотеки deno, которые мне подходят?
Используя node, вы можете найти некоторые библиотеки на npm. У deno тоже есть аналогичная платформа, которая на данный момент разделена на две библиотеки, одна из которых является официальным стандартом, а другая — сторонней. Стандартную библиотеку можно найти здесь:Deno Standard Modules. Сторонние библиотеки можно найти здесь:Deno Third Party Modules
Настоящий бой: используйте deno для разработки системы торговых центров с дополнениями, удалениями и изменениями.
Хорошо, с указанными выше очками знаний теперь вы можете сражаться. В первую очередь нужно убедиться, что на вашем компьютере установлена deno 1.0. Кроме того, поскольку используется mongodb, вам необходимо установить mongodb на свой компьютер.
интерфейс
Давайте сначала взглянем на интерфейс нашего магазина:
Хоть воробей и маленький, но у него есть все внутренние органы! Он имеет функции добавления продуктов, запроса продуктов, удаления продуктов и изменения продуктов. Это типичная система стилей REST API.
Структура проекта
Затем взгляните на структуру проекта:
- .deno_plugins: это библиотека динамической компоновки, загружаемая модулем mongo, не обращайте на нее внимания.
- config/db.ts: это соответствующий файл конфигурации для подключения к mongodb. Текущий записанный номер порта — 27017, если ваш порт mongodb не такой, вы можете изменить его в этом файле.
- controllers/goods.ts: это логический код для добавления, удаления, проверки и изменения
- public/index.html: Это внешняя статическая страница. Она не имеет ничего общего с deno. Нам нужно использовать deno только для обслуживания каталога.
- deps.ts: используется для управления удаленными библиотеками зависимостей, а затем реэкспортирует их для использования другими файлами.
- Файл входа server.ts аналогичен файлу входа app.js, когда мы используем epress или koa.
Выбор зависимых модулей
Поскольку проект включает в себя переднюю и заднюю часть, если вы используете узел, вы обычно выбираете экспресс или коа. Точно так же, когда мы используем deno, нам также нужно выбрать соответствующий фреймворк, иначе с http-сервисами и скачками маршрутизации не так просто справиться. Для таких фреймворков на deno больше помеченныхoakа такжеabc, здесь мы решили использовать abc.
Кроме того, поскольку используется mongodb, также необходимо ввестиmongo
заключительные замечания
Хорошо,это я написал для первого опыта Deno.Конкретный код выкладывать не планирую.Заинтересованные могут зайти на Github View:
Если у вас есть какие-либо вопросы, вы можете поделиться ими и учиться вместе~