Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Модули и пакеты

Импорты

import "templates/defaults.aura" as defaults # файл, относительно текущего
import github/acme/aura-k8s@v1.2 as k8s      # пакет из registry, версия обязательна

Циклические импорты обнаруживаются с полной цепочкой: E0401: cyclic import: a.aura -> b.aura -> a.aura.

Что экспортирует модуль

Модуль отдаёт импортёру объект: свойства, блоки и pub-элементы:

# validators.aura
pub type Service # схема — часть API
  name: String
  port: Int
end

def valid_port(p) # приватный хелпер: импортёру невидим
  ok: p > 0 && p < 65536
end

pub def service(name, port) # функция — часть API
  name: name
  port: valid_port(port).ok ? port : fail("invalid port #{port}")
end
# использование
import "validators.aura" as v

api:    v.service("api", 8080)
worker: new v.Service
  name: "worker"
  port: 9000
end

Ключевая гарантия безопасности: экспортированная функция выполняется с правами своего модуля, а не вызывающего. Пакет не может «одолжить» ваши права на чтение файлов, заставив вас вызвать его функцию.

Установка пакетов: aura add

aura add github/acme/aura-k8s@v1.2.3        # из сети (точная версия)
aura add pkg/internal@v1.0.0 --from ./pkg.aura   # из локального файла

aura add — единственное место, где Aura обращается к сети: пакет скачивается, валидируется, кладётся в локальный кэш (~/.aura/registry) и фиксируется в aura.lock с хешем целостности. eval всегда работает оффлайн.

aura.lock и –frozen

  • лок хранит точную версию + integrity каждого пакета;
  • хеш считается по потоку токенов, а не по байтам: переформатирование пакета или исправление опечатки в комментарии проверку не срабатывают, а переименование поля или изменение числа — срабатывает. Проверка целостности, которая срабатывает на безобидных правках, приучает обновлять лок не глядя, что её и обесценивает;
  • запись sha256- от старой версии по-прежнему проверяется и обновляется при первой возможности записи;
  • подмена содержимого пакета → E0402 integrity mismatch;
  • в CI запускайте с --frozen: резолв строго по локу, отсутствие записи — ошибка E0403, лок не переписывается.

Диапазоны версий (@v1, @v1.2) резолвятся по локальному кэшу в максимальную подходящую (v1.2 → 1.2.*).