Gestor de paquetes Vex
Describe proyectos Wave basados en manifest, dependencias de ruta Git, lockfile, compilaciones fuera de línea y límites wavec.
Wave Foundation
papel
Vex es el administrador de paquetes y la herramienta de compilación para Wave. Vex opera encima de wavec. Vex es responsable de la estructura del proyecto y el análisis de dependencia, y wavec es responsable de los indicadores del compilador y el proceso de compilación.
El comando Vex se basa en manifest. vex build, vex check y vex run no reciben intencionalmente la bandera raw wavec.
Crear un paquete
vex init
vex init --lib
La aplicación usa src/main.wave y la biblioteca usa src/lib.wave. La estructura raíz del paquete es la siguiente:
my_project/
├── src/
│ └── main.wave
├── vex.ws
├── vex.lock
└── .vex/
└── deps/
vex.ws se convierte en manifest. Vex no utiliza manifest en la extensión .wson.
{
name = "my_project",
version = 0.1.0,
lib = false,
description = "my_project Project",
author = "unknown",
license = "Unknown",
dependencies = []
}
comando de construcción
vex build [--target <triple>] [--release] [--dry-run] [--locked] [--offline]
vex check [--target <triple>] [--release] [--dry-run] [--locked] [--offline]
vex run [--target <triple>] [--release] [--dry-run] [--locked] [--offline] [-- <args...>]
Las opciones para Vex se mantienen pequeñas. Si necesita control dependiente del compilador, como emit, linker, CPU, ABI o debug, use wavec directamente. Cuando necesite utilizar un compilador específico, configure VEX_WAVEC=/path/to/wavec.
Los pasos de progreso como Resolving, Fetching, Compiling, Checking, Running, Finished se generan en stderr y la salida del programa se mantiene en stdout.
Git Dependencia Central
Las dependencias Vex se especifican como path locales o Git URL. Una dependencia sólo puede utilizar uno de los dos métodos.
{
name = "app",
version = 0.1.0,
dependencies = [
{ name = "local_math", path = "../local_math" },
{ name = "remote_math", git = "https://github.com/example/math.git", tag = "v0.1.0" }
]
}
La dependencia Git solo puede especificar como máximo uno de branch, tag o rev. Cada raíz de dependencia debe tener su propia vex.ws. Vex resuelve recursivamente la dependencia manifest, rechaza identidades de paquetes en conflicto y almacena el Git checkout administrado en .vex/deps/<name>.
lockfile Contrato
El esquema v2 vex.lock registra todo el gráfico de dependencia transitiva y el Git commit exacto. Comprométete con manifest. Usando el mismo manifest y un lockfile válido seleccionará el mismo gráfico de dependencia sin seguir branch o tag nuevamente.
Los comandos que requieren dependencias se interpretan automáticamente y se pueden preparar de antemano con los siguientes comandos.
vex fetch
vex update
vex update math shared_core
vex update actualiza todos los paquetes Git, o solo los paquetes especificados y los gráficos de transición afectados. Los paquetes bloqueados no relacionados mantendrán commit seleccionado.
Flujo de trabajo locked y offline
--locked prohíbe la creación y modificación de vex.lock. Fallará si el archivo no existe, tiene un esquema no compatible o no coincide con el gráfico manifest. Ya fijado en lockfile, commit se puede importar cuando sea necesario.
--offline prohíbe todas las operaciones de red Git. Los checkout y commit requeridos ya deberían existir localmente.
vex fetch --locked
vex build --locked --offline
Estos dos comandos son un flujo de trabajo estricto CI. Prepare un commit bloqueado exactamente cuando la red esté disponible y luego compílelo sin cambiar la red o lockfile. dry-run no importa dependencias ni reescribe lockfile.
Información y configuración del compilador
vex info
vex setup wavec
vex setup wavec --version <version>
vex --version
Vex valida el esquema wavec dry-run JSON antes de la compilación real. Los compiladores que no implementen el esquema requerido no ejecutarán un plan desconocido y lo rechazarán con un error de compatibilidad.