Pular para o conteúdo principal
Versão: v2.x.x

🔁 Start Script

Execute seus scripts do package.json em um processo em segundo plano e teste-os 🧑🏻‍🔬

startScript(caminhoDoArquivo: string, opções?: startScriptOptions);

O startScript executa um script diretamente do seu package.json ou deno.json e o mantém em execução em um processo em segundo plano até que você o libere.

Bastante útil para testar seu NextJS, NuxtJS, nodemon e todos os apps do projeto 🚀

Permite que cookies persistam (ou não) 🍪

O Poku permite que você utilize o cliente HTTP que quiser, como o Axios, o fetch nativo e outros ✨

Não é necessário adicionar plugins externos para algo tão simples, basta executá-lo como está 🌱

Pare de alterar seu código devido às regras do teste, você criou seu código, não o Poku 🩵


Veja exemplos práticos usando fetch, Axios, uma sessão persistente e mais.


Boas Práticas 👮🏽

✅ Sinalize o status "pronto"

Quando possível, defina uma saída do console para indicar que o serviço está pronto.
Isso irá permitir que você evite execuções prematuras e vazamentos de porta.

✅ Defina um tempo limite

Definindo um tempo limite, você evita processos indefinidos que não concluem nem com sucesso nem com falha.

✅ Encerre seu serviço quando o trabalho estiver concluído

Você não precisa necessariamente encerrar seu serviço em segundo plano como a última linha do teste, se ele não estiver mais em uso.

import { startScript } from 'poku';

const server = await startScript('start', {
/**
* Espere pelo "ready" na saída do console
*/
startAfter: 'ready',

/**
* Por padrão, o `timeout` é `60000` (1 minuto) tanto para sucesso quanto para falha
*/
timeout: 60000,
});

await server.end();
dica

Você pode passar uma porta para end para forçar o término do subprocesso em segundo plano para o Bun e o Deno.

ℹ️ Para usar a porta em end, você irá precisar do lsof para Unix ou netstat para Windows.

info

Se você estiver enfrentando problemas ao usar esse recurso com o Bun, consulte oven-sh/bun#11055 ao usar o método end passando uma porta ou oven-sh/bun#7441 para subprocessos não concluídos.

Oh não! Eu quebrei, e agora? 🤡

Liberação de uma porta que está vazando:

lsof -i :PORT
  • Substitua PORT pelo número da porta que você está investigando.

Em seguida, use o PID retornado com o comando kill:

kill -9 PID
  • Substitua PID pelo ID do processo atual que você encontrou usando o comando lsof.

Opções Disponíveis

type StartScriptOptions = {
/**
* - Por padrão, será resolvido na primeira saída do console
* - Definindo uma string: ele aguardará uma string específica na saída do console para resolver
* - Definindo um número: ele aguardará o tempo em milissegundos para resolver
*
* ---
*
* ℹ️ `startAfter` é sensível a maiúsculas e minúsculas.
*
* ---
*
* @default undefined
*/
startAfter?: string | number;
/**
* Encerra o serviço sem sucesso nem falha após:
* @default 60000
*/
timeout?: number;
/**
* Exibe a saída do serviço
*/
verbose?: boolean;
/**
* Especifica um caminho de destino para iniciar o processo
*
* @default "./"
*/
cwd?: string | undefined;
/**
* Por padrão, o Poku usará o `npm`. Altere conforme desejar.
*/
runner?: 'npm' | 'bun' | 'deno' | 'yarn' | 'pnpm';
};

type End = (port?: number | number[]) => Promise<void>;