Krabs ist ein Enterprise-Ready Express.js/Fastify Middleware, um Tausende verschiedener Websites aus einer einzigen nächsten.js-Instanz zu bedienen.
Krabs ist auf NPM erhältlich und kann wie folgt installiert werden:
Für Express.js (siehe auf NPM)
yarn add krabs
# or
npm install --save krabsFür Fastify (siehe NPM)
yarn add fastify-krabs
# or
npm insall --save fastify-krabs_app und _document sind jeder Website gemeinsam.Sie können eine Video -Einführung auf YouTube ansehen:

Nehmen wir an, wir möchten zwei verschiedene Websites mit nur einer nächsten.js -Instanz unterstützen und sie mit nur einem Express.js -Server bedienen. Schreiben Sie die folgende Konfiguration in eine .krabs.js oder .krabs.config.js -Datei in der Stammweite Ihres Projekts:
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!
} ,
] ,
} ,
] ,
} ; Erstellen Sie eine index.js -Datei und füllen Sie sie mit dem folgenden Inhalt aus:
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 ( ) ; In unserer .krabs.js Datei haben wir zwei Mieter mit zwei verschiedenen name konfiguriert: website-1 und website-2 . Lassen Sie uns nun zwei neue Ordner innerhalb des nächsten.js pages/ des Verzeichnisses erstellen:
pages/
- _app.js
- website-1
- website-2 Fühlen Sie sich frei, eine Seite hinzuzufügen, die Sie in diesen beiden Ordnern gewünscht haben, da sie behandelt werden, da sie die Standard-/ pages/ den Ordner für die Nächsten.js waren. Fügen wir den folgenden Inhalten zu pages/website-1/about.js hinzu:
function About ( ) {
return < div > About website 1 </ div > ;
}
export default About ; und den folgenden Code zu pages/website-2/about.js :
function About ( ) {
return < div > This is website 2 </ div > ;
}
export default About ; Map local.website-1.com und local.website-2.com in Ihrer Hosts-Datei und dann den Server durch Eingabe: Starten Sie:
node index.jsWenn Sie unter http://dev.pizza.local.website-1.com/about und http://local.website-2.com/about sehen, werden Sie die oben genannten Komponenten sehen, die von derselben nächsten.js-Instanz wiedergegeben werden!
Nehmen wir an, wir möchten zwei verschiedene Websites mit nur einer nächsten.js -Instanz unterstützen und sie mit nur einem Express.js -Server bedienen. Schreiben Sie die folgende Konfiguration in eine .krabs.js oder .krabs.config.js -Datei in der Stammweite Ihres Projekts:
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!
} ,
] ,
} ,
] ,
} ; Erstellen Sie eine index.js -Datei und füllen Sie sie mit dem folgenden Inhalt aus:
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 ( ) ; In unserer .krabs.js Datei haben wir zwei Mieter mit zwei verschiedenen name konfiguriert: website-1 und website-2 . Lassen Sie uns nun zwei neue Ordner innerhalb des nächsten.js pages/ des Verzeichnisses erstellen:
pages/
- _app.js
- website-1
- website-2 Fühlen Sie sich frei, eine Seite hinzuzufügen, die Sie in diesen beiden Ordnern gewünscht haben, da sie behandelt werden, da sie die Standard-/ pages/ den Ordner für die Nächsten.js waren. Fügen wir den folgenden Inhalten zu pages/website-1/about.js hinzu:
function About ( ) {
return < div > About website 1 </ div > ;
}
export default About ; und den folgenden Code zu pages/website-2/about.js :
function About ( ) {
return < div > This is website 2 </ div > ;
}
export default About ; Map local.website-1.com und local.website-2.com in Ihrer Hosts-Datei und dann den Server durch Eingabe: Starten Sie:
node index.jsWenn Sie unter http://dev.pizza.local.website-1.com/about und http://local.website-2.com/about sehen, werden Sie die oben genannten Komponenten sehen, die von derselben nächsten.js-Instanz wiedergegeben werden!
Hier finden Sie die vollständige Dokumentation (mit echten Code -Beispielen)!
Krabs ist frei wie in Freiheit und lizenziert unter der MIT -Lizenz.
