KRABS est un middleware express.js / agitation en entreprise en entreprise pour desservir des milliers de sites Web différents à partir d'une seule instance Next.js.
KRABS est disponible sur NPM et peut être installé comme suit:
Pour express.js (voir sur NPM)
yarn add krabs
# or
npm install --save krabsPour Fintify (voir sur NPM)
yarn add fastify-krabs
# or
npm insall --save fastify-krabs_app et _document sont communes à chaque site Web.Vous pouvez regarder une introduction vidéo sur YouTube :

Disons que nous voulons prendre en charge deux sites Web différents avec une seule instance Next.js et les servir en utilisant un seul serveur express.js. Écrivez la configuration suivante dans un fichier .krabs.js ou .krabs.config.js à l'intérieur de la racine de votre projet:
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!
} ,
] ,
} ,
] ,
} ; Créez un fichier index.js et remplissez-le avec le contenu suivant:
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 ( ) ; À l'intérieur de notre fichier .krabs.js , nous avons configuré deux locataires avec deux propriétés name différentes: website-1 et website-2 . Alors maintenant, créons deux nouveaux dossiers à l'intérieur des pages/ répertoires par défaut de Next.js:
pages/
- _app.js
- website-1
- website-2 N'hésitez pas à ajouter n'importe quelle page que vous souhaitez à l'intérieur de ces deux dossiers, car ils seront traités car ils ont été les pages/ dossiers par défaut. Ajoutons le contenu suivant aux pages/website-1/about.js :
function About ( ) {
return < div > About website 1 </ div > ;
}
export default About ; et le code suivant sur pages/website-2/about.js :
function About ( ) {
return < div > This is website 2 </ div > ;
}
export default About ; Map local.website-1.com et local.website-2.com dans votre fichier hosts, puis démarrez le serveur en tapant:
node index.jsAller à http://dev.pizza.local.website-1.com/about et http://local.website-2.com/about, vous verrez les composants ci-dessus rendus par la même instance Next.js!
Disons que nous voulons prendre en charge deux sites Web différents avec une seule instance Next.js et les servir en utilisant un seul serveur express.js. Écrivez la configuration suivante dans un fichier .krabs.js ou .krabs.config.js à l'intérieur de la racine de votre projet:
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!
} ,
] ,
} ,
] ,
} ; Créez un fichier index.js et remplissez-le avec le contenu suivant:
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 ( ) ; À l'intérieur de notre fichier .krabs.js , nous avons configuré deux locataires avec deux propriétés name différentes: website-1 et website-2 . Alors maintenant, créons deux nouveaux dossiers à l'intérieur des pages/ répertoires par défaut de Next.js:
pages/
- _app.js
- website-1
- website-2 N'hésitez pas à ajouter n'importe quelle page que vous souhaitez à l'intérieur de ces deux dossiers, car ils seront traités car ils ont été les pages/ dossiers par défaut. Ajoutons le contenu suivant aux pages/website-1/about.js :
function About ( ) {
return < div > About website 1 </ div > ;
}
export default About ; et le code suivant sur pages/website-2/about.js :
function About ( ) {
return < div > This is website 2 </ div > ;
}
export default About ; Map local.website-1.com et local.website-2.com dans votre fichier hosts, puis démarrez le serveur en tapant:
node index.jsAller à http://dev.pizza.local.website-1.com/about et http://local.website-2.com/about, vous verrez les composants ci-dessus rendus par la même instance Next.js!
Vous pouvez trouver la documentation complète (avec de vrais exemples de code) ici!
Krabs est libre comme dans la liberté et sous licence sous la licence du MIT .
