Rust для JavaScript-разработчиков - Обзор экосистемы инструментов

Перевод | Автор оригинала: Shesh

Это первая часть из серии о знакомстве с языком Rust для JavaScript-разработчиков. Вот все главы:

  1. Обзор инструментальной экосистемы
  2. Переменные и типы данных
  3. Функции и поток управления
  4. Сопоставление с образцом и перечисления

Мне легче понять что-то новое, если это было объяснено в терминах того, что я уже знаю - я думал, что могут быть другие, как я :)

Вот версия tl;dr:

ToolJavaScriptRust
Version Managernvmrustup
Package ManagernpmCargo
Package Registrynpmjs.comcrates.io
Package Manifestpackage.jsonCargo.toml
Dependency Lockfilepackage-lock.jsonCargo.lock
Task Runnernpm scripts, gulp etcmake, cargo-make
Live Reloadnodemoncargo-watch
LinterESLint, TSLint, JSLintClippy
FormatterPrettierrustfmt
Dependency Vulnerability Checkernpm auditcargo-audit

Настройка

Rust устанавливается с помощью команды rustup. rustup похож на nvm в Node.js. Вы можете использовать его для установки и управления несколькими версиями Rust и многого другого.

Cargo

Установка Rust с помощью rustup также устанавливает Cargo аналогично тому, как установка Node.js также устанавливает NPM. Cargo - это пакетный менеджер Rust, который будет вам хорошо знаком, если вы раньше использовали NPM.

Пакеты Rust называются «крэйтами», и они загружаются из реестра crates.io аналогично тому, как пакеты NPM загружаются с npmjs.com.

NPM в первую очередь является менеджером пакетов, но также используется как средство выполнения задач с помощью функции сценариев npm. Cargo имеет встроенную поддержку для общих задач, таких как запуск кода, построение кода и т.д. Cargo имеет такие функции, как рабочие области (аналогичные lerna), переопределения зависимостей (аналогично пакету исправлений) из коробки. Это также средство запуска тестов (аналогично mocha, jest и т.д.), Средство выполнения тестов и т.д.

В общем, Cargo - это NPM на стероидах!

Настройка проекта

Создание нового проекта выполняется запуском

$ cargo new hello_rust

Это чем-то похоже на npm init. Это создает каталог под названием «hello_rust» со следующими файлами:

hello_rust
├── .git
├── .gitignore
├── Cargo.toml
└─┬ src
  └── main.rs

Cargo.toml

Это файл манифеста пакета, аналогичный package.json. Файл блокировки (эквивалент package-lock.json) называется Cargo.lock. Открыв Cargo.toml, вы увидите знакомый макет:

[package]
name = "hello_rust"
version = "0.1.0"
authors = ["sheshbabu"]
edition = "2018"

[dependencies]

Таблица [package] содержит метаданные, такие как имя крэйта, автор, ключевые слова и т.д. Таблица [dependencies] похожа на объект dependencies в package.json. Cargo.toml также поддерживает [dev-dependencies], аналогичные devDependencies.

Управление зависимостями

Установка новой зависимости выполняется вручную путем редактирования файла Cargo.toml, добавления зависимости в [зависимости] и запуска сборки Cargo. Например, если мы хотим установить крэйт «serde», нам нужно отредактировать файл Cargo.toml следующим образом:

[package]
name = "hello_rust"
version = "0.1.0"
authors = ["sheshbabu"]
edition = "2018"

[dependencies]
+ serde = "1.0.106"

и беги

$ cargo build

Точно так же, чтобы удалить или обновить зависимость, нам нужно вручную отредактировать файл Cargo.toml и запустить сборку Cargo. Сначала меня смутило наличие команды Cargo install, но она оказалась эквивалентом npm install -g.

Если вы хотите что-то похожее на npm install, npm update или npm uninstall, вы можете установить Cargo-edit, который расширяет Cargo с помощью подкоманд Cargo add, cargo rm и cargo upgrade.

Вы также можете указать версию зависимости, используя шаблоны, аналогичные NPM.

Инструменты разработки

Task Runner

Cargo поддерживает выполнение общих задач, таких как сборка, запуск, тестирование и т.д. Но если вам нужно что-то похожее на сценарии NPM, вы можете использовать make или cargo-make.

Живая перезагрузка

Nodemon - важный инструмент для разработки Node.js - он отслеживает изменения в файлах и автоматически перезапускает приложение. Cargo-watch - аналог в мире Rust.

Линтер и форматтер

В Rust есть встроенный линтер под названием Clippy и форматтер под названием rustfmt. Они эквивалентны ESLint и Prettier в экосистеме JS. Крючки Precommit можно управлять с помощью карго-хаски.

Проверка уязвимости

Сканирование на наличие уязвимостей в зависимостях выполняется с помощью Cargo-audit и очень похоже на аудит npm.

Спасибо за чтение! Не стесняйтесь подписываться на меня в Твиттере, чтобы увидеть больше подобных сообщений :)