Rust для JavaScript-разработчиков - Обзор экосистемы инструментов
Перевод | Автор оригинала: Shesh
Это первая часть из серии о знакомстве с языком Rust для JavaScript-разработчиков. Вот все главы:
- Обзор инструментальной экосистемы
- Переменные и типы данных
- Функции и поток управления
- Сопоставление с образцом и перечисления
Мне легче понять что-то новое, если это было объяснено в терминах того, что я уже знаю - я думал, что могут быть другие, как я :)
Вот версия tl;dr:
Tool | JavaScript | Rust |
---|---|---|
Version Manager | nvm | rustup |
Package Manager | npm | Cargo |
Package Registry | npmjs.com | crates.io |
Package Manifest | package.json | Cargo.toml |
Dependency Lockfile | package-lock.json | Cargo.lock |
Task Runner | npm scripts, gulp etc | make, cargo-make |
Live Reload | nodemon | cargo-watch |
Linter | ESLint, TSLint, JSLint | Clippy |
Formatter | Prettier | rustfmt |
Dependency Vulnerability Checker | npm audit | cargo-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.
Спасибо за чтение! Не стесняйтесь подписываться на меня в Твиттере, чтобы увидеть больше подобных сообщений :)