KRABS عبارة عن برامج وسيطة Express.JS جاهزة للمؤسسات/FASTIFY لخدمة الآلاف من مواقع الويب المختلفة من مثيل واحد. js.
Krabs متاح على NPM ويمكن تثبيته على النحو التالي:
لـ Express.js (انظر على NPM)
yarn add krabs
# or
npm install --save krabsل fastify (انظر على NPM)
yarn add fastify-krabs
# or
npm insall --save fastify-krabs_app و _document صفحات شائعة في كل موقع ويب.يمكنك مشاهدة مقدمة فيديو على YouTube :

دعنا نقول أننا نريد دعم موقعين مختلفين مع مثيل واحد فقط. اكتب التكوين التالي داخل ملف .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/ الدليل الافتراضي لـ NEXT.JS:
pages/
- _app.js
- website-1
- website-2 لا تتردد في إضافة أي صفحة تريدها داخل هذين المجلدين ، حيث سيتم معاملتها لأنها كانت pages/ مجلد JS الافتراضي. دعنا نضيف المحتوى التالي إلى 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 ; map 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!
دعنا نقول أننا نريد دعم موقعين مختلفين مع مثيل واحد فقط. اكتب التكوين التالي داخل ملف .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/ الدليل الافتراضي لـ NEXT.JS:
pages/
- _app.js
- website-1
- website-2 لا تتردد في إضافة أي صفحة تريدها داخل هذين المجلدين ، حيث سيتم معاملتها لأنها كانت pages/ مجلد JS الافتراضي. دعنا نضيف المحتوى التالي إلى 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 ; map 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!
يمكنك العثور على الوثائق الكاملة (مع أمثلة رمز حقيقي) هنا!
Krabs مجانية كما هو الحال في الحرية والمرخصة بموجب ترخيص معهد ماساتشوستس للتكنولوجيا .
