Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added error when no config is exported from next.config.js #9921

Closed
wants to merge 7 commits into from
Closed

Added error when no config is exported from next.config.js #9921

wants to merge 7 commits into from

Conversation

jamesmosier
Copy link
Contributor

If there is nothing exported from next.config.js, throw a fatal error and notify the user that they had a config file present but nothing was exported from it.

Fixes #9919

@ijjk
Copy link
Member

ijjk commented Jan 3, 2020

Stats from current PR

Default Server Mode
General Overall increase ⚠️
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
buildDuration 12.7s 12.6s -44ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +314 B
Client Bundles (main, webpack, commons)
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
main-HASH.js gzip 6.44 kB 6.44 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..6ef5.js gzip 13.8 kB 13.8 kB
framework.HASH.js gzip 39.5 kB 39.5 kB
Overall change 69.2 kB 69.2 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
main-HASH.module.js gzip 5.42 kB 5.42 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.6 kB 12.6 kB
framework.HA..dule.js gzip 39.4 kB 39.4 kB
Overall change 63.7 kB 63.7 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_app.js gzip 1.33 kB 1.33 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.93 kB 2.93 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.89 kB 9.89 kB
Client Pages Modern
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_app.module.js gzip 757 B 757 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.49 kB 2.49 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.43 kB 7.43 kB
Client Build Manifests
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
index.html gzip 1.04 kB 1.04 kB
link.html gzip 1.04 kB 1.04 kB
withRouter.html gzip 1.03 kB 1.03 kB
Overall change 3.11 kB 3.11 kB

Serverless Mode
General Overall increase ⚠️
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
buildDuration 13s 13s -40ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +314 B
Client Bundles (main, webpack, commons)
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
main-HASH.js gzip 6.44 kB 6.44 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..6ef5.js gzip 13.8 kB 13.8 kB
framework.HASH.js gzip 39.5 kB 39.5 kB
Overall change 69.2 kB 69.2 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
main-HASH.module.js gzip 5.42 kB 5.42 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.6 kB 12.6 kB
framework.HA..dule.js gzip 39.4 kB 39.4 kB
Overall change 63.7 kB 63.7 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_app.js gzip 1.33 kB 1.33 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.93 kB 2.93 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.89 kB 9.89 kB
Client Pages Modern
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_app.module.js gzip 757 B 757 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.49 kB 2.49 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.43 kB 7.43 kB
Client Build Manifests
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_error.js gzip 78.9 kB 78.9 kB
hooks.html gzip 1.07 kB 1.07 kB
index.js gzip 79.1 kB 79.1 kB
link.js gzip 81.3 kB 81.3 kB
routerDirect.js gzip 79.2 kB 79.2 kB
withRouter.js gzip 79.3 kB 79.3 kB
Overall change 399 kB 399 kB

Commit: 184ba57

Copy link
Member

@timneutkens timneutkens left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs tests in order to make sure it doesn't break in the future.

@ijjk
Copy link
Member

ijjk commented Jan 3, 2020

Stats from current PR

Default Server Mode
General Overall increase ⚠️
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
buildDuration 13.7s 13.7s -88ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +314 B
Client Bundles (main, webpack, commons)
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
main-HASH.js gzip 6.44 kB 6.44 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..6ef5.js gzip 13.8 kB 13.8 kB
framework.HASH.js gzip 39.5 kB 39.5 kB
Overall change 69.2 kB 69.2 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
main-HASH.module.js gzip 5.42 kB 5.42 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.6 kB 12.6 kB
framework.HA..dule.js gzip 39.4 kB 39.4 kB
Overall change 63.7 kB 63.7 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_app.js gzip 1.33 kB 1.33 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.93 kB 2.93 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.89 kB 9.89 kB
Client Pages Modern
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_app.module.js gzip 757 B 757 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.49 kB 2.49 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.43 kB 7.43 kB
Client Build Manifests
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
index.html gzip 1.04 kB 1.04 kB
link.html gzip 1.04 kB 1.04 kB
withRouter.html gzip 1.03 kB 1.03 kB
Overall change 3.11 kB 3.11 kB

Serverless Mode
General Overall increase ⚠️
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
buildDuration 14.3s 14s -362ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +314 B
Client Bundles (main, webpack, commons)
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
main-HASH.js gzip 6.44 kB 6.44 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..6ef5.js gzip 13.8 kB 13.8 kB
framework.HASH.js gzip 39.5 kB 39.5 kB
Overall change 69.2 kB 69.2 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
main-HASH.module.js gzip 5.42 kB 5.42 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.6 kB 12.6 kB
framework.HA..dule.js gzip 39.4 kB 39.4 kB
Overall change 63.7 kB 63.7 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_app.js gzip 1.33 kB 1.33 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.93 kB 2.93 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.89 kB 9.89 kB
Client Pages Modern
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_app.module.js gzip 757 B 757 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.49 kB 2.49 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.43 kB 7.43 kB
Client Build Manifests
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_error.js gzip 78.9 kB 78.9 kB
hooks.html gzip 1.07 kB 1.07 kB
index.js gzip 79.1 kB 79.1 kB
link.js gzip 81.3 kB 81.3 kB
routerDirect.js gzip 79.2 kB 79.2 kB
withRouter.js gzip 79.3 kB 79.3 kB
Overall change 399 kB 399 kB

Commit: 27185b8

@@ -181,6 +181,12 @@ export default function loadConfig(
phase,
userConfigModule.default || userConfigModule
)
if (Object.keys(userConfig).length === 0) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we should be checking for the number of keys in the object. Shouldn't we be checking for undefined (or a loose == null)?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my testing, when I did

// some-config.js

{ someProp: true }
const config = require('./some-config.js') 
// config = {}

config was {}, not a falsy output.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

now that I think of it, technically this is a valid next.config.js file...

module.exports = {}

so maybe there is another check I could do to see if the file has any exports defined 🤔

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't been able to find a way to determine if a Node file actually contains a module.exports definition (short of reading the file via fs.readFile and parsing the string file contents).

There is a way to get the Node Module object of the file (via module.children.find), but the contents are still {} 😢

Any thoughts? I know that module.exports = {} is technically a valid next.config.js file, so checking via Object.keys isn't going to work under that assumption.

@ijjk
Copy link
Member

ijjk commented Jan 22, 2020

Stats from current PR

Default Server Mode
General Overall increase ⚠️
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
buildDuration 14.4s 14.1s -328ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +314 B
Client Bundles (main, webpack, commons)
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
main-HASH.js gzip 5.1 kB 5.1 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d57b.js gzip 16.1 kB 16.1 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.8 kB 69.8 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
main-HASH.module.js gzip 4.1 kB 4.1 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15 kB 15 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.5 kB 64.5 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
index.html gzip 1.02 kB 1.02 kB
link.html gzip 1.03 kB 1.03 kB
withRouter.html gzip 1.02 kB 1.02 kB
Overall change 3.07 kB 3.07 kB

Serverless Mode
General Overall increase ⚠️
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
buildDuration 14.7s 14.6s -64ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +314 B
Client Bundles (main, webpack, commons)
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
main-HASH.js gzip 5.1 kB 5.1 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d57b.js gzip 16.1 kB 16.1 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.8 kB 69.8 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
main-HASH.module.js gzip 4.1 kB 4.1 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15 kB 15 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.5 kB 64.5 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles
zeit/next.js canary jamesmosier/next.js patch/fix-9919 Change
_error.js gzip 46.2 kB 46.2 kB
hooks.html gzip 1.05 kB 1.05 kB
index.js gzip 46.4 kB 46.4 kB
link.js gzip 71.9 kB 71.9 kB
routerDirect.js gzip 69.9 kB 69.9 kB
withRouter.js gzip 69.9 kB 69.9 kB
Overall change 305 kB 305 kB

Commit: dd11ed7

@jamesmosier
Copy link
Contributor Author

Looks like another PR was created instead 🤷‍♂🤷‍♂ #10228

@jamesmosier jamesmosier deleted the patch/fix-9919 branch January 28, 2020 23:29
@vercel vercel locked as resolved and limited conversation to collaborators Jan 31, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

next.config.js that doesn't export anything doesn't throw error
4 participants