O KRABS é um middleware exprest.js/fastify pronto para a empresa para servir milhares de sites diferentes de uma única instância Next.js.
O Krabs está disponível no NPM e pode ser instalado da seguinte forma:
Para Express.js (veja no NPM)
yarn add krabs
# or
npm install --save krabsPara o Fastify (veja no NPM)
yarn add fastify-krabs
# or
npm insall --save fastify-krabs_app e _document são comuns a todos os sites.Você pode assistir a uma introdução de vídeo no YouTube :

Digamos que queremos oferecer suporte a dois sites diferentes com apenas um próximo. Escreva a seguinte configuração dentro de um arquivo .krabs.js ou .krabs.config.js dentro da raiz do seu projeto:
module . exports = {
tenants : [
{
name : 'website-1' ,
domains : [
{
development : / dev.[a-z]*.local.website-1.com / , // Regex supported!
staging : 'stage.website-1.com' ,
production : 'website-1.com' ,
} ,
] ,
} ,
{
name : 'website-2' ,
domains : [
{
development : 'local.website-2.com' ,
staging : 'stage.website-2.com' ,
production : / [w|d|-|_]+.website-2.com / , // Regex supported!
} ,
] ,
} ,
] ,
} ; Crie um arquivo index.js e preencha -o com o seguinte conteúdo:
const express = require ( 'express' ) ;
const next = require ( 'next' ) ;
const krabs = require ( 'krabs' ) . default ;
const dev = process . env . NODE_ENV !== 'production' ;
const app = next ( { dev } ) ;
async function main ( ) {
try {
await app . prepare ( ) ;
const handle = app . getRequestHandler ( ) ;
const server = express ( ) ;
server
. get ( '*' , ( req , res ) => krabs ( req , res , handle , app ) )
. listen ( 3000 , ( ) => console . log ( 'server ready' ) ) ;
} catch ( err ) {
console . log ( err . stack ) ;
}
}
main ( ) ; Dentro do nosso arquivo .krabs.js , configuramos dois inquilinos com duas propriedades name diferentes: website-1 e website-2 . Então, agora vamos criar duas novas pastas dentro das pages/ diretórios padrão do próximo.JS:
pages/
- _app.js
- website-1
- website-2 Sinta -se à vontade para adicionar qualquer página que você desejar dentro dessas duas pastas, pois elas serão tratadas, pois eram as pages/ pastas do Next.JS. Vamos adicionar o seguinte conteúdo às pages/website-1/about.js :
function About ( ) {
return < div > About website 1 </ div > ;
}
export default About ; e o seguinte código para pages/website-2/about.js :
function About ( ) {
return < div > This is website 2 </ div > ;
}
export default About ; MAP local.website-1.com e local.website-2.com Em seu arquivo hosts e, em seguida, inicialize o servidor digitando:
node index.jsIndo para http://dev.pizza.local.website-1.com/about e http://local.website-2.com/about, você verá os componentes acima renderizados pela mesma instância Next.JS!
Digamos que queremos oferecer suporte a dois sites diferentes com apenas um próximo. Escreva a seguinte configuração dentro de um arquivo .krabs.js ou .krabs.config.js dentro da raiz do seu projeto:
module . exports = {
tenants : [
{
name : 'website-1' ,
domains : [
{
development : / dev.[a-z]*.local.website-1.com / , // Regex supported!
staging : 'stage.website-1.com' ,
production : 'website-1.com' ,
} ,
] ,
} ,
{
name : 'website-2' ,
domains : [
{
development : 'local.website-2.com' ,
staging : 'stage.website-2.com' ,
production : / [w|d|-|_]+.website-2.com / , // Regex supported!
} ,
] ,
} ,
] ,
} ; Crie um arquivo index.js e preencha -o com o seguinte conteúdo:
const fastify = require ( 'fastify' ) ( { trustProxy : true } ) ;
const next = require ( 'next' ) ;
const krabs = require ( '../dist/fastify-krabs' ) . default ;
const dev = process . env . NODE_ENV !== 'production' ;
const app = next ( { dev } ) ;
async function main ( ) {
try {
await app . prepare ( ) ;
const handle = app . getRequestHandler ( ) ;
fastify
. get ( '*' , ( request , reply ) => krabs ( request , reply , handle , app ) )
. listen ( 3000 , ( ) => console . log ( 'server ready' ) ) ;
} catch ( err ) {
console . log ( err . stack ) ;
}
}
main ( ) ; Dentro do nosso arquivo .krabs.js , configuramos dois inquilinos com duas propriedades name diferentes: website-1 e website-2 . Então, agora vamos criar duas novas pastas dentro das pages/ diretórios padrão do próximo.JS:
pages/
- _app.js
- website-1
- website-2 Sinta -se à vontade para adicionar qualquer página que você desejar dentro dessas duas pastas, pois elas serão tratadas, pois eram as pages/ pastas do Next.JS. Vamos adicionar o seguinte conteúdo às pages/website-1/about.js :
function About ( ) {
return < div > About website 1 </ div > ;
}
export default About ; e o seguinte código para pages/website-2/about.js :
function About ( ) {
return < div > This is website 2 </ div > ;
}
export default About ; MAP local.website-1.com e local.website-2.com Em seu arquivo hosts e, em seguida, inicialize o servidor digitando:
node index.jsIndo para http://dev.pizza.local.website-1.com/about e http://local.website-2.com/about, você verá os componentes acima renderizados pela mesma instância Next.JS!
Você pode encontrar a documentação completa (com exemplos de código real) aqui!
O Krabs é gratuito como na liberdade e licenciado sob a licença do MIT .
