Pular para o conteúdo

slash module

slash module lista os módulos de um projeto blog e instala módulos oficiais nele. Esta página é a referência do comando: o que ele lê, o que grava e o que recusa. Para o uso no dia a dia, veja Módulos e execução. Os módulos e o que cada um faz estão em Módulos oficiais.

slash module tem dois subcomandos: list e add. Cada um aceita --dir <pasta>; sem ele, usa a pasta atual. Outro subcomando é recusado, e o comando não remove módulos.

uso: slash module list [--dir <pasta>]
uso: slash module add <id> [--dir <pasta>]
[saída: 0]

O comando lê o slash.lock da pasta e mostra duas listas:

  • Instalados: o id, a versão e a tag do slash-kit de onde a cópia veio. Os dados vêm do slash.lock.
  • Disponíveis: os módulos do catálogo desta versão que ainda não estão no slash.lock, com as dependências de cada um. Quando não há dependência, a linha diz sem dependências.

Quando uma lista está vazia, a linha mostra nenhum.

Instalados:
  posts  1.0.0  v1.1.0

Disponíveis:
  categorias         1.0.0  depende de: posts
  comentarios        1.0.0  depende de: posts
  metricas           1.0.0  depende de: posts
  newsletter         1.0.0  sem dependências
  paginas            1.0.0  sem dependências
  redirecionamentos  1.0.0  sem dependências
  seo                1.0.0  depende de: posts, paginas
  tags               1.0.0  depende de: posts
[saída: 0]

Fora de um projeto blog, não há slash.lock. O comando para com a mensagem abaixo e código de saída 1.

Esta pasta não é um projeto blog do slash: slash.lock não encontrado em <pasta>. Rode o comando dentro de um projeto criado com "slash create <pasta> --template blog" ou use --dir <pasta>.
[saída: 1]

slash module add <id> copia o módulo e as dependências que o projeto ainda não tem. Dependências entram antes dos módulos que as pedem. Por exemplo, slash module add seo num projeto que só tem posts copia paginas e depois seo.

Antes de copiar qualquer arquivo, o comando confere, nesta ordem:

  1. Lock conhecido. Se o slash.lock lista um módulo que o catálogo desta versão não conhece, o comando recusa com O slash.lock lista o módulo <id>, que esta versão do slash não conhece… e não copia nada.
  2. Id no catálogo. Um id fora do catálogo é recusado com módulo desconhecido: <id> (disponíveis: …).
  3. Ainda não instalado. Um módulo já listado no slash.lock é recusado com O módulo <id> já está instalado (versão <versão>).
  4. Núcleo. O comando lê CORE_VERSION em src/server.ts e confere a faixa core de cada módulo a copiar, dependências incluídas. Os nove módulos oficiais pedem ^1.0.0, ou seja, de 1.0.0 até antes de 2.0.0. Um núcleo fora da faixa é recusado com O módulo <id> exige o núcleo do painel <faixa>, mas este projeto tem <versão>…. Sem CORE_VERSION legível, o comando para com Não foi possível ler CORE_VERSION em src/server.ts….
  5. Índice. src/modules/index.ts precisa existir: sem ele, o comando recusa com src/modules/index.ts não existe… e não copia nada. Se ele é o gerado pelo slash create, o comando escreve de novo. Se você o editou à mão, o comando acrescenta o import depois do último import e o módulo no fim da lista. Quando não reconhece o formato, ele recusa com src/modules/index.ts foi editado à mão…. Ele recusa quando a lista de módulos não é única, quando há comentário dentro dela, quando a lista vem antes dos import, ou quando o módulo já aparece no arquivo.
  6. Checkout limpo. Se houver mudanças não commitadas em modules/ do checkout do slash-kit de onde o comando roda, inclusive arquivos novos ainda não rastreados, o comando recusa com a lista delas e não copia nada.

Só então o comando copia modules/<id> desse checkout para src/modules/<id>. Se a pasta já existir no projeto, a cópia é recusada. A instalação é tudo ou nada: as pastas são copiadas primeiro para uma pasta temporária e movidas para o lugar. Se alguma etapa falha, as pastas movidas são removidas e o índice volta ao que era.

Ao fim, o comando grava os módulos novos no slash.lock, com a tag mais recente do checkout, o commit e a versão de cada um, e mostra a mensagem de instalação.

Instalado: tags 1.0.0.
Reinicie o servidor (bun run start) para o painel carregar o que entrou.
[saída: 0]

O índice que o comando gera, ou que ele acrescenta quando você o editou à mão, tem esta forma. O exemplo mostra posts e tags:

src/modules/index.ts
// Generated by `slash create`: the installed modules, dependencies first.
import type { ModuleDef } from "../panel/contract/index";
import { module as postsModule } from "./posts/module";
import { module as tagsModule } from "./tags/module";
export const modules: readonly ModuleDef[] = [postsModule, tagsModule];
  • slash module add só instala os módulos do catálogo oficial. Um módulo próprio entra na pasta src/modules/ à mão, com a entrada no índice.
  • O comando só lista e adiciona. Para ligar, desligar e configurar um módulo já instalado, use a tela Módulos do painel, descrita em Módulos.
  • Módulos oficiais: o que cada módulo guarda e quais permissões ele usa.
  • CLI: todos os comandos e as opções de --dir.