Krabsは、Enterprise-Ready Express.js/Fustify Middlewareで、単一のNext.jsインスタンスから何千もの異なるWebサイトを提供しています。
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ページは、すべてのWebサイトに共通しています。YouTubeでビデオの紹介を見ることができます:

次の1つのインスタンスのみで2つの異なるWebサイトをサポートし、1つの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ファイル内で、2つの異なるnameプロパティを持つ2つのテナントを設定しました: website-1とwebsite-2 。次に、next.jsのデフォルトpages/ディレクトリ内に2つの新しいフォルダーを作成しましょう。
pages/
- _app.js
- website-1
- website-2これらのフォルダーの両方に必要なページを自由に追加してください。デフォルトのNext.jsの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 ; Hostsファイルにlocal.website-1.comとlocal.website-2.comをマップしてから、以下を入力してサーバーを起動します。
node index.jshttp://dev.pizza.local.website-1.com/aboutおよびhttp://local.website-2.com/aboutに行くと、上記のコンポーネントが同じnext.jsインスタンスでレンダリングされていることがわかります。
次の1つのインスタンスのみで2つの異なるWebサイトをサポートし、1つの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ファイル内で、2つの異なるnameプロパティを持つ2つのテナントを設定しました: website-1とwebsite-2 。次に、next.jsのデフォルトpages/ディレクトリ内に2つの新しいフォルダーを作成しましょう。
pages/
- _app.js
- website-1
- website-2これらのフォルダーの両方に必要なページを自由に追加してください。デフォルトのNext.jsの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 ; Hostsファイルにlocal.website-1.comとlocal.website-2.comをマップしてから、以下を入力してサーバーを起動します。
node index.jshttp://dev.pizza.local.website-1.com/aboutおよびhttp://local.website-2.com/aboutに行くと、上記のコンポーネントが同じnext.jsインスタンスでレンダリングされていることがわかります。
完全なドキュメント(実際のコードの例を掲載)はこちらで見つけることができます!
Krabsは自由のように無料で、 MITライセンスの下でライセンスされています。
