Next.js: pages folder outside of root?

Created on 18 Jan 2017  ยท  15Comments  ยท  Source: vercel/next.js

Is it possible to have pages folder not in the project root (where node_modules and package.json reside) but, for example, inside the src folder at root? This is because in many projects, all the app source is put in a separate folder under root and it's logical to have pages folder in there as well.

Most helpful comment

That's possible. Then you need to pass the src directory as your app directory. Like this:

next src
next build src
next start src

All 15 comments

That's possible. Then you need to pass the src directory as your app directory. Like this:

next src
next build src
next start src

Nice! Closing this one since it has been answered. Feel free to re-open if needed ๐Ÿ˜„ โค๏ธ

I don't see doc about this when running next --help:

$ next --help

    Usage
      $ next <command>

    Available commands
      init, build, start, dev

    For more information run a command with the --help flag
      $ next init --help

Nor in the README?

Perfect! Thank you!

@sedubois

โฏ next build --help

    Description
      Compiles the application for production deployment

    Usage
      $ next build <dir>

    <dir> represents where the compiled .next folder should go.
    If no directory is provided, .next will be created in the current directory

How to do that while using Express.js ?

My development command is npm run dev => nodemon server/server.js

My folder structure:

|_ pages
|_ components
|_ ...
server
|_ server.js
|_ routes
|__ foo.js
.babelrc
.eslintrc
package.json
...

@kunokdev have you found out how to use a src while using also Express?

@paschalidi Nope, I decided to use Next.js basic convention, works for me atm.

I figure it out :)

const app = next({ dir: './src', dev });

this way you can have the pages folder into the src folder.

Hope this is straightforward enough. If not let me know

The example of @paschalidi throws an error in my environment with styled components and react-i18n:

These dependencies were not found:

* P:\example\node_modules\next\dist\pages\_error.js?entry in multi ./node_modules/next/dist/pages/_error.js?entry
* P:\example\node_modules\next\dist\pages\_document.js?entry in multi ./node_modules/next/dist/pages/_document.js?entry

@julmot please keep in mind that you're commenting on closed issues (closed over a year ago), and that we don't keep track of these.

I figure it out :)

const app = next({ dir: './src', dev });

this way you can have the pages folder into the src folder.

Hope this is straightforward enough. If not let me know

THANK YOU. I was looking for this for longer than I care to admit.

Stats from current PR


Default Server Mode



General

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| buildDuration | 15s | 15.8s | โš ๏ธ +761ms |
| nodeModulesSize | 48.3 MB | 48.3 MB | โœ“ |


Client Bundles (main, webpack, commons)

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| main-HASH.js | 18.9 kB | 18.9 kB | โœ“ |
| main-HASH.js gzip | 6.79 kB | 6.79 kB | โœ“ |
| webpack-HASH.js | 1.53 kB | 1.53 kB | โœ“ |
| webpack-HASH.js gzip | 746 B | 746 B | โœ“ |
| 4952ddcd88e7..2b8407376.js | 21.9 kB | 21.9 kB | โœ“ |
| 4952ddcd88e7..7376.js gzip | 7.81 kB | 7.81 kB | โœ“ |
| de003c3a9d30..6604acae7.js | 43.2 kB | 43.2 kB | โœ“ |
| de003c3a9d30..cae7.js gzip | 15.5 kB | 15.5 kB | โœ“ |
| framework.5b..dbaff70d3.js | 125 kB | 125 kB | โœ“ |
| framework.5b..70d3.js gzip | 39.4 kB | 39.4 kB | โœ“ |
| Overall change | 211 kB | 211 kB | โœ“ |


Client Bundles (main, webpack, commons) Modern

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| main-HASH.module.js | 17.2 kB | 17.2 kB | โœ“ |
| main-HASH.module.js gzip | 6.52 kB | 6.52 kB | โœ“ |
| webpack-HASH.module.js | 1.53 kB | 1.53 kB | โœ“ |
| webpack-HASH..dule.js gzip | 746 B | 746 B | โœ“ |
| de003c3a9d30..42.module.js | 45.6 kB | 45.6 kB | โœ“ |
| de003c3a9d30..dule.js gzip | 16.5 kB | 16.5 kB | โœ“ |
| framework.5b..d3.module.js | 125 kB | 125 kB | โœ“ |
| framework.5b..dule.js gzip | 39.4 kB | 39.4 kB | โœ“ |
| Overall change | 190 kB | 190 kB | โœ“ |


Client Pages

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| _app.js | 1.81 kB | 1.81 kB | โœ“ |
| _app.js gzip | 873 B | 873 B | โœ“ |
| _error.js | 12 kB | 12 kB | โœ“ |
| _error.js gzip | 4.73 kB | 4.73 kB | โœ“ |
| hooks.js | 12.7 kB | 12.7 kB | โœ“ |
| hooks.js gzip | 4.79 kB | 4.79 kB | โœ“ |
| index.js | 318 B | 318 B | โœ“ |
| index.js gzip | 222 B | 222 B | โœ“ |
| link.js | 8.14 kB | 8.14 kB | โœ“ |
| link.js gzip | 3.5 kB | 3.5 kB | โœ“ |
| routerDirect.js | 408 B | 408 B | โœ“ |
| routerDirect.js gzip | 281 B | 281 B | โœ“ |
| withRouter.js | 419 B | 419 B | โœ“ |
| withRouter.js gzip | 280 B | 280 B | โœ“ |
| Overall change | 35.8 kB | 35.8 kB | โœ“ |


Client Pages Modern

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| _app.module.js | 1.7 kB | 1.7 kB | โœ“ |
| _app.module.js gzip | 832 B | 832 B | โœ“ |
| _error.module.js | 23.3 kB | 23.3 kB | โœ“ |
| _error.module.js gzip | 8.59 kB | 8.59 kB | โœ“ |
| hooks.module.js | 1.52 kB | 1.52 kB | โœ“ |
| hooks.module.js gzip | 793 B | 793 B | โœ“ |
| index.module.js | 294 B | 294 B | โœ“ |
| index.module.js gzip | 223 B | 223 B | โœ“ |
| link.module.js | 8.53 kB | 8.53 kB | โœ“ |
| link.module.js gzip | 3.68 kB | 3.68 kB | โœ“ |
| routerDirect.module.js | 394 B | 394 B | โœ“ |
| routerDirect..dule.js gzip | 281 B | 281 B | โœ“ |
| withRouter.module.js | 404 B | 404 B | โœ“ |
| withRouter.m..dule.js gzip | 278 B | 278 B | โœ“ |
| Overall change | 36.1 kB | 36.1 kB | โœ“ |


Client Build Manifests

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| _buildManifest.js | 81 B | 81 B | โœ“ |
| _buildManifest.js gzip | 61 B | 61 B | โœ“ |
| _buildManifest.module.js | 81 B | 81 B | โœ“ |
| _buildManife..dule.js gzip | 61 B | 61 B | โœ“ |
| Overall change | 162 B | 162 B | โœ“ |


Rendered Page Sizes

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| index.html | 3.62 kB | 3.62 kB | โœ“ |
| index.html gzip | 945 B | 945 B | โœ“ |
| link.html | 3.66 kB | 3.66 kB | โœ“ |
| link.html gzip | 954 B | 954 B | โœ“ |
| withRouter.html | 3.67 kB | 3.67 kB | โœ“ |
| withRouter.html gzip | 942 B | 942 B | โœ“ |
| Overall change | 10.9 kB | 10.9 kB | โœ“ |





Serverless Mode



General

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| buildDuration | 15.2s | 17.8s | โš ๏ธ +2.6s |
| nodeModulesSize | 48.3 MB | 48.3 MB | โœ“ |


Client Bundles (main, webpack, commons)

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| main-HASH.js | 18.9 kB | 18.9 kB | โœ“ |
| main-HASH.js gzip | 6.79 kB | 6.79 kB | โœ“ |
| webpack-HASH.js | 1.53 kB | 1.53 kB | โœ“ |
| webpack-HASH.js gzip | 746 B | 746 B | โœ“ |
| 4952ddcd88e7..2b8407376.js | 21.9 kB | 21.9 kB | โœ“ |
| 4952ddcd88e7..7376.js gzip | 7.81 kB | 7.81 kB | โœ“ |
| de003c3a9d30..6604acae7.js | 43.2 kB | 43.2 kB | โœ“ |
| de003c3a9d30..cae7.js gzip | 15.5 kB | 15.5 kB | โœ“ |
| framework.5b..dbaff70d3.js | 125 kB | 125 kB | โœ“ |
| framework.5b..70d3.js gzip | 39.4 kB | 39.4 kB | โœ“ |
| Overall change | 211 kB | 211 kB | โœ“ |


Client Bundles (main, webpack, commons) Modern

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| main-HASH.module.js | 17.2 kB | 17.2 kB | โœ“ |
| main-HASH.module.js gzip | 6.52 kB | 6.52 kB | โœ“ |
| webpack-HASH.module.js | 1.53 kB | 1.53 kB | โœ“ |
| webpack-HASH..dule.js gzip | 746 B | 746 B | โœ“ |
| de003c3a9d30..42.module.js | 45.6 kB | 45.6 kB | โœ“ |
| de003c3a9d30..dule.js gzip | 16.5 kB | 16.5 kB | โœ“ |
| framework.5b..d3.module.js | 125 kB | 125 kB | โœ“ |
| framework.5b..dule.js gzip | 39.4 kB | 39.4 kB | โœ“ |
| Overall change | 190 kB | 190 kB | โœ“ |


Client Pages

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| _app.js | 1.81 kB | 1.81 kB | โœ“ |
| _app.js gzip | 873 B | 873 B | โœ“ |
| _error.js | 12 kB | 12 kB | โœ“ |
| _error.js gzip | 4.73 kB | 4.73 kB | โœ“ |
| hooks.js | 12.7 kB | 12.7 kB | โœ“ |
| hooks.js gzip | 4.79 kB | 4.79 kB | โœ“ |
| index.js | 318 B | 318 B | โœ“ |
| index.js gzip | 222 B | 222 B | โœ“ |
| link.js | 8.14 kB | 8.14 kB | โœ“ |
| link.js gzip | 3.5 kB | 3.5 kB | โœ“ |
| routerDirect.js | 408 B | 408 B | โœ“ |
| routerDirect.js gzip | 281 B | 281 B | โœ“ |
| withRouter.js | 419 B | 419 B | โœ“ |
| withRouter.js gzip | 280 B | 280 B | โœ“ |
| Overall change | 35.8 kB | 35.8 kB | โœ“ |


Client Pages Modern

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| _app.module.js | 1.7 kB | 1.7 kB | โœ“ |
| _app.module.js gzip | 832 B | 832 B | โœ“ |
| _error.module.js | 23.3 kB | 23.3 kB | โœ“ |
| _error.module.js gzip | 8.59 kB | 8.59 kB | โœ“ |
| hooks.module.js | 1.52 kB | 1.52 kB | โœ“ |
| hooks.module.js gzip | 793 B | 793 B | โœ“ |
| index.module.js | 294 B | 294 B | โœ“ |
| index.module.js gzip | 223 B | 223 B | โœ“ |
| link.module.js | 8.53 kB | 8.53 kB | โœ“ |
| link.module.js gzip | 3.68 kB | 3.68 kB | โœ“ |
| routerDirect.module.js | 394 B | 394 B | โœ“ |
| routerDirect..dule.js gzip | 281 B | 281 B | โœ“ |
| withRouter.module.js | 404 B | 404 B | โœ“ |
| withRouter.m..dule.js gzip | 278 B | 278 B | โœ“ |
| Overall change | 36.1 kB | 36.1 kB | โœ“ |


Client Build Manifests

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| _buildManifest.js | 81 B | 81 B | โœ“ |
| _buildManifest.js gzip | 61 B | 61 B | โœ“ |
| _buildManifest.module.js | 81 B | 81 B | โœ“ |
| _buildManife..dule.js gzip | 61 B | 61 B | โœ“ |
| Overall change | 162 B | 162 B | โœ“ |


Serverless bundles

| | zeit/next.js canary | zeit/next.js canary | Change |
| - | - | - | - |
| _error.js | 253 kB | 253 kB | โœ“ |
| _error.js gzip | 67.9 kB | 67.9 kB | โœ“ |
| hooks.html | 3.75 kB | 3.75 kB | โœ“ |
| hooks.html gzip | 979 B | 979 B | โœ“ |
| index.js | 254 kB | 254 kB | โœ“ |
| index.js gzip | 68.2 kB | 68.2 kB | โœ“ |
| link.js | 261 kB | 261 kB | โœ“ |
| link.js gzip | 70.3 kB | 70.3 kB | โœ“ |
| routerDirect.js | 255 kB | 255 kB | โœ“ |
| routerDirect.js gzip | 68.3 kB | 68.3 kB | โœ“ |
| withRouter.js | 254 kB | 254 kB | โœ“ |
| withRouter.js gzip | 68.4 kB | 68.4 kB | โœ“ |
| Overall change | 1.28 MB | 1.28 MB | โœ“ |

Commit: 9af587930f2880daf6fab85914aa1973dd796129

The SRC directory is used to wrap pages, but two additional files are created during build, respectively next-env.d.ts and tsconfig.json.

cross-env NODE_ENV=production SERVER_ENV=prod PORT=8080 HTTPS=true next build src && tsc --project tsconfig.server.json

image

Was this page helpful?
0 / 5 - 0 ratings