KRABS es un Express.js/Fastify Middleware listo para la empresa para servir miles de sitios web diferentes de una sola instancia de Next.js.
KRABS está disponible en NPM y se puede instalar de la siguiente manera:
Para express.js (ver en NPM)
yarn add krabs
# or
npm install --save krabsPara Fastify (ver en NPM)
yarn add fastify-krabs
# or
npm insall --save fastify-krabs_app y _document Las páginas de Document son comunes a cada sitio web.Puedes ver una presentación de video en YouTube :

Digamos que queremos admitir dos sitios web diferentes con una sola instancia de Next.js y servirlos usando solo un servidor Express.js. Escriba la siguiente configuración dentro de un archivo .krabs.js o .krabs.config.js dentro de la raíz de su proyecto:
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!
} ,
] ,
} ,
] ,
} ; Cree un archivo index.js y llénelo con el siguiente contenido:
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 de nuestro archivo .krabs.js , configuramos dos inquilinos con dos propiedades name diferentes: website-1 y website-2 . Así que ahora creemos dos nuevas carpetas dentro de las pages/ directorio predeterminadas de la siguiente.js:
pages/
- _app.js
- website-1
- website-2 Siéntase libre de agregar cualquier página que desee dentro de ambas carpetas, ya que serán tratadas, ya que fueron las pages/ carpetas de Next.js. Agregamos el siguiente contenido a pages/website-1/about.js :
function About ( ) {
return < div > About website 1 </ div > ;
}
export default About ; y el siguiente código a pages/website-2/about.js :
function About ( ) {
return < div > This is website 2 </ div > ;
}
export default About ; Mapeador local.website-1.com y local.website-2.com en su archivo de hosts, luego arranca el servidor escribiendo:
node index.jsIr a http://dev.pizza.local.website-1.com/about y http://local.website-2.com/about, ¡verá los componentes anteriores renderizados por la misma instancia next.js!
Digamos que queremos admitir dos sitios web diferentes con una sola instancia de Next.js y servirlos usando solo un servidor Express.js. Escriba la siguiente configuración dentro de un archivo .krabs.js o .krabs.config.js dentro de la raíz de su proyecto:
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!
} ,
] ,
} ,
] ,
} ; Cree un archivo index.js y llénelo con el siguiente contenido:
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 de nuestro archivo .krabs.js , configuramos dos inquilinos con dos propiedades name diferentes: website-1 y website-2 . Así que ahora creemos dos nuevas carpetas dentro de las pages/ directorio predeterminadas de la siguiente.js:
pages/
- _app.js
- website-1
- website-2 Siéntase libre de agregar cualquier página que desee dentro de ambas carpetas, ya que serán tratadas, ya que fueron las pages/ carpetas de Next.js. Agregamos el siguiente contenido a pages/website-1/about.js :
function About ( ) {
return < div > About website 1 </ div > ;
}
export default About ; y el siguiente código a pages/website-2/about.js :
function About ( ) {
return < div > This is website 2 </ div > ;
}
export default About ; Mapeador local.website-1.com y local.website-2.com en su archivo de hosts, luego arranca el servidor escribiendo:
node index.jsIr a http://dev.pizza.local.website-1.com/about y http://local.website-2.com/about, ¡verá los componentes anteriores renderizados por la misma instancia next.js!
¡Puede encontrar la documentación completa (con ejemplos de código real) aquí!
Krabs es gratuito como en la libertad y con licencia bajo la licencia MIT .
