Execute create-next-app
with Yarn or npx to bootstrap the example:
npx create-next-app --example with-zones with-zones-app
# or
yarn create next-app --example with-zones with-zones-app
Download the example:
curl https://codeload.github.com/zeit/next.js/tar.gz/canary | tar -xz --strip=2 next.js-canary/examples/with-zones
cd with-zones
Install it and run:
npm install
# or
yarn
With Next.js you can use multiple apps as a single app using it's multi-zones feature. This is an example showing how to use it.
In this example, we've two apps: 'home' and 'blog'.
We also have a set of rules defined in rules.json
for the proxy.
Now let's start two of our app using:
npm run home
npm run blog
# or
yarn home
yarn blog
Then start the proxy:
npm run proxy
# or
yarn proxy
Now you can visit http://localhost:9000 and access and develop both apps a single app.
This is the place we define rules for our proxy. Here are the rules(in rules.json
) available for this app:
{
"rules": [
{
"pathname": "/blog",
"method": ["GET", "POST", "OPTIONS"],
"dest": "http://localhost:5000"
},
{ "pathname": "/**", "dest": "http://localhost:4000" }
]
}
These rules are based on ZEIT now path alias rules and use micro-proxy
as the proxy.
- All pages should be unique across zones. A page with the same name should not exist in multiple zones. Otherwise, there'll be unexpected behaviour in client side navigation.
- According to the above example, a page named
blog
should not be exist in thehome
zone.
- According to the above example, a page named
Here's how are going to deploy this application into production.
- Open the
now.json
file in bothblog
andhome
directories and change the aliases as you wish. - Then update
rules-prod.json
accordingly. - Now deploy both apps:
cd home
now && now alias
cd ../blog
now && now alias
cd ..
- Finally, set the path alias rules with
now alias with-zones.now.sh -r rules-prod.json
You can use a domain name of your choice in the above command instead of
with-zones.now.sh
.
That's it. Now you can access the final app via: https://with-zones.now.sh