Krabs -это готовое предприятие Express.js/Фордификация промежуточного программного обеспечения для обслуживания тысяч различных веб-сайтов из одного экземпляра Next.js.
Krabs доступен на NPM и может быть установлен следующим образом:
Для Express.js (см. На NPM)
yarn add krabs
# or
npm install --save krabsДля фазвии (см. На NPM)
yarn add fastify-krabs
# or
npm insall --save fastify-krabs_app и _document страницы являются общими для каждого веб -сайта.Вы можете посмотреть видео на YouTube :

Допустим, мы хотим поддержать два разных веб -сайта с одним экземпляром next.js и обслуживать их, используя только один сервер express.js. Запишите следующую конфигурацию внутри файла .krabs.js или .krabs.config.js внутри корня вашего проекта:
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!
} ,
] ,
} ,
] ,
} ; Создайте файл index.js и заполните его следующим контентом:
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 ( ) ; В нашем файле .krabs.js мы настроили двух арендаторов с двумя различными свойствами name : website-1 и website-2 . Итак, теперь давайте создадим две новые папки внутри pages/ каталога следующего.js.
pages/
- _app.js
- website-1
- website-2 Не стесняйтесь добавлять любую страницу pages/ которую вы хотите в обе эти папки, так как они будут обработаны, так как они были по умолчанию. Давайте добавим следующий контент на pages/website-1/about.js :
function About ( ) {
return < div > About website 1 </ div > ;
}
export default About ; и следующий код на pages/website-2/about.js :
function About ( ) {
return < div > This is website 2 </ div > ;
}
export default About ; Карта local.website-1.com и local.website-2.com в вашем файле хостов, затем загрузите сервер, набрав:
node index.jsПойду по адресу http://dev.pizza.local.website-1.com/about и http://local.website-2.com/about, вы увидите компоненты выше, представленные тем же экземпляром.
Допустим, мы хотим поддержать два разных веб -сайта с одним экземпляром next.js и обслуживать их, используя только один сервер express.js. Запишите следующую конфигурацию внутри файла .krabs.js или .krabs.config.js внутри корня вашего проекта:
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!
} ,
] ,
} ,
] ,
} ; Создайте файл index.js и заполните его следующим контентом:
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 ( ) ; В нашем файле .krabs.js мы настроили двух арендаторов с двумя различными свойствами name : website-1 и website-2 . Итак, теперь давайте создадим две новые папки внутри pages/ каталога следующего.js.
pages/
- _app.js
- website-1
- website-2 Не стесняйтесь добавлять любую страницу pages/ которую вы хотите в обе эти папки, так как они будут обработаны, так как они были по умолчанию. Давайте добавим следующий контент на pages/website-1/about.js :
function About ( ) {
return < div > About website 1 </ div > ;
}
export default About ; и следующий код на pages/website-2/about.js :
function About ( ) {
return < div > This is website 2 </ div > ;
}
export default About ; Карта local.website-1.com и local.website-2.com в вашем файле хостов, затем загрузите сервер, набрав:
node index.jsПойду по адресу http://dev.pizza.local.website-1.com/about и http://local.website-2.com/about, вы увидите компоненты выше, представленные тем же экземпляром.
Вы можете найти полную документацию (с реальными примерами кода) здесь!
Krabs бесплатен, как и в свободе , и лицензирован по лицензии MIT .
