1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00
Commit graph

500 commits

Author SHA1 Message Date
Tim Neutkens d6c7050816
Remove module.exports from client bundles (#5093)
Removes `module.exports` so that `module` is no longer required

Ref: https://github.com/zeit/next.js/pull/4943#discussion_r213232263

This saves 15 bytes from every client bundle + 9 bytes from the initial HTML.
2018-09-04 17:30:01 +02:00
Nathaniel Hill 885eee8021 Fix HMR when parent directory starts with '.' (#4589)
@timneutkens 

This simple change seems to work for me:

```
const ignored = [
    '**/.*',
    'node_modules'
]
```

I believe the regex is used here to try and work on windows as well. So, I wasted a bunch of time trying to figure out how to use a regex and/or the `path` module to ignore the parent directories until I noticed the following:

> glob patterns are not filepaths. They are a type of regular language that is converted to a JavaScript regular expression. Thus, when forward slashes are defined in a glob pattern, the resulting regular expression will match windows or POSIX path separators just fine.

this is from the [anymatch](https://github.com/micromatch/anymatch) documentation which is what webpack uses accoring to this:

https://webpack.js.org/configuration/watch/#watchoptions-ignored

I've verified this glob pattern solves the problem in my environment, can someone test and verify that this works on windows?

👍
2018-09-04 17:20:10 +02:00
Tim Neutkens a8a97b07c7
Provide a way to copy files in exportPathMap (#5089)
Related #4659 

Adds the possibility for users to copy files inside of `exportPathMap`. This allows for adding `robots.txt` `sitemap.xml` etc. another use case is for https://github.com/hanford/next-offline, currently it's manually reading the buildId in `exportPathMap`.

To allow users to do this we'll introduce a new parameter holding an object with the following keys:

- `dev` - `true` when `exportPathMap` is being called in development. `false` when running `next export`. In development `exportPathMap` is used to define routes and behavior like copying files is not required.
- `dir` - Absolute path to the project directory
- `outDir` - Absolute path to the `out` directory (configurable with `-o` or `--outdir`). When `dev` is `true` the value of `outDir` will be `null`.
- `distDir` - Absolute path to the `.next` directory (configurable using the `distDir` config key)
- `buildId` - The buildId the export is running for

Example usage:

```js
// next.config.js
const fs = require('fs')
const {join} = require('path')
const {promisify} = require('util')
const copyFile = promisify(fs.copyFile)

module.exports = {
  exportPathMap: async function (defaultPathMap, {dev, dir, outDir, distDir, buildId}) {
    if(dev) {
      return defaultPathMap
    }
    // This will copy robots.txt from your project root into the out directory
    await copyFile(join(dir, 'robots.txt'), join(outDir, 'robots.txt'))
    return defaultPathMap
  }
}
```
2018-09-04 16:01:50 +02:00
Tim Neutkens b39b44ac23
Remove obsolete route (#5092)
This route is no longer needed
2018-09-04 15:59:48 +02:00
Tomas Roos 9abbea8571 Make sure that 404's is not cached by CDN:s (#5088) 2018-09-04 14:13:15 +02:00
Tim Neutkens 625288796f
Move next export into it's own directory (#5084)
* Rename static to export in integration tests

* Move export functionality into it’s own directory

* Fix path
2018-09-04 11:21:00 +02:00
Tim Neutkens fbd933bd22
Fix 404 export (#5061) 2018-08-30 15:10:18 +02:00
Tim Neutkens ead5a8bc3c
Split out Loadable.Capture and make NoSSR smaller (#5060) 2018-08-30 15:09:53 +02:00
Tim Neutkens e1c544cd75
Fix loading... issue (#5058)
This fixes intermittent `loading...` on some requests which surfaced on zeit.co when upgrading
2018-08-30 14:02:18 +02:00
Faris Abusada 015b0a9d22 Fixes dynamic chunks preload links, use href instead of src (#5047)
😬... 

https://w3c.github.io/preload/
2018-08-28 17:56:48 +02:00
Kyle Holmberg b7fe234005 404 routing for static export without exportPathMap (#5036)
Resolves #5035 

Thanks a billion to @timneutkens for holding my hand
2018-08-27 12:28:54 +02:00
HaNdTriX 11816537c3 Open editor from error-overlay (minor) (#4979)
This PR adds links to the [react-error-overlay](https://www.npmjs.com/package/react-error-overlay).
This allows a developer to open a stack trace in its own editor.

![codelinking](https://user-images.githubusercontent.com/1265681/44278860-a63e0a80-a24f-11e8-9c69-c5365c026c58.gif)

Closes #4813
2018-08-24 16:30:41 +02:00
Tim Neutkens 918e0a6e32
Replace uuid with nanoid (#4987)
* Replace uuid with nanoid

Same functionality in a smaller package:

https://bundlephobia.com/result?p=nanoid@1.2.1
https://bundlephobia.com/result?p=uuid@3.3.2

* Add comment
2018-08-23 17:02:47 +02:00
Faris Abusada 15e6cb8ddf Fixes dynamic chunks preload (#4992)
based on [this](https://spectrum.chat/thread/0d24d6cc-96f9-46f0-aa86-515c1b1caac9?m=MTUzNDc2MjA3MzkyMQ==) conversation
2018-08-20 14:19:36 +02:00
Tim Neutkens a9a3fc1fca
Warn if a specific page is not found in build manifest (#4986)
There's an edge case @timothyis is running into, this will show exactly what files are missing.

I currently can't reproduce, so this is a first step at providing better error messages
2018-08-20 13:01:21 +02:00
HaNdTriX 0acba737d2 Fix server key warning (#4973)
The current canary version shows the following warning in development mode:

```log
Warning: Each child in an array or iterator should have a unique "key" prop. See https://fb.me/react-warning-keys for more information.
    in script
    in NextScript
    in body
    in html
    in Document
```

This PR adds proper keys to the devFiles on the server.

Related https://github.com/zeit/next.js/pull/4954
2018-08-17 11:28:48 -07:00
Tim Neutkens b7e256ba01
Make onClick Link tests more consistent (#4954) 2018-08-15 12:42:56 -07:00
ǝlzlǝoq lǝᴉuɐp ツ 87f5df2454 Factor out NextScript inline source (#4934) (#4939)
This PR factors out the inline script into an own static method; fixes #4934.
2018-08-14 11:05:25 -07:00
Tim Neutkens f3f939dde4
Run method sorting codemod (#4909)
react-codemod recommended way of having methods defined
2018-08-06 20:53:06 -07:00
Tim Neutkens a41e3c102e
Await preloading right before rendering the page (#4896) 2018-08-05 15:53:34 -07:00
Tim Neutkens 183866a96d
Add support for rendering .css chunks (#4861)
Depends on https://github.com/zeit/next-plugins/pull/228

Failing tests are expected as `@zeit/next-css` has to be updated/released first.

This implements rendering of `.css` chunks. Effectively removing the custom document requirement when adding next-css/sass/less/stylus.
2018-07-30 15:48:02 +02:00
Tim Neutkens 6a087c6a5d
Rename commons directory to runtime (#4853) 2018-07-27 19:29:25 +02:00
Tim Neutkens 475b426ed1
Compile pages to .next/static directory (#4828)
* Compile pages to .next/static/<buildid>/pages/<page>

* Fix test

* Export class instead of using exports

* Use constant for static directory

* Add comment about what the middleware does
2018-07-25 13:45:42 +02:00
Tim Neutkens 75476a9136
[WIP] Webpack 4, react-error-overlay, react-loadable (#4639)
Webpack 4, react-error-overlay, react-loadable (major)
2018-07-24 11:24:40 +02:00
Albin Ekblom 992ea2e875 Allow app component to be wrapped with custom enhancer when rendering (#4762)
* Add support for custom App and Component enhancers

* Add ctx.renderPage test

* Add tests for single enhancer function

* Cleanup renderPage options check

* Cleanup

* Add comment about backwards compatibility for renderPage

* Add more test cases
2018-07-13 11:22:45 +02:00
Thomas Hermann 1c817d2bbf Use nonce attribute for all scripts and preloads if provided (#4539)
When implementing a strict CSP with nonces and `strict-dynamic`, every script and preload requires a nonce.

https://csp.withgoogle.com/docs/strict-csp.html
2018-06-28 20:16:30 +02:00
Luc e98a877ee4 Merge url query with exportPathMap (#4678)
This PR fixes #4615

From the issue :
> One thing we might consider is merging and showing a warning for keys not defined in exportPathMap

The behaviour after this PR is the following :

```js
// next.config.js
module.exports = {
  exportPathMap: () => ({
    '/': { page: '/', query: { a: 'blue' } }
  })
}
```

| url called | `ctx.query` | warning ? |
|-|-|-|
| `/` | `{ a: 'blue' }` | |
| `/?a=red` | `{ a: 'blue' }` | |
| `/?b=green` | `{ a: 'blue', b: 'green' }` | `... parameter 'b' missing in exportPathMap` |

Is that the expected behaviour ? If not, I'll update the PR to shape the expected behavior.
2018-06-28 08:37:57 +02:00
Tim Neutkens 85769c3d32
Pass through buildId to webpack config in development (#4665)
Fixes #4664
2018-06-25 23:06:46 +02:00
Olivier Tassinari 36c82fd127 Fix incorrect wording (#4658)
I can't use a functional component with `_document.js`.
[is-react](https://www.npmjs.com/package/is-react) can be used for another potential implementation of the warning logic, but maybe relying on `React.createElement()` internal checks is enough.
2018-06-24 17:10:24 +02:00
Rafał Ruciński 8889430777 Properly escape the dot character in regexp (#4608)
A follow-up to #4604: the dot in the regexp was not escaped as intended. By default `*` matches greedily, so the results are the same, but the new regexp should be more clear. Sorry for the mistake.
2018-06-14 19:47:49 +02:00
Tim Neutkens f2c2519159
Move build directory outside of server folder (#4565)
The prepares for next-server.

I also took this as an opportunity to get all build directory paths from a single location, as they were previously scattered across webpack/babel plugins and loaders.
2018-06-14 19:30:14 +02:00
Rafał Ruciński 7333dd622c Process available chunk names properly in dev mode (#4604)
Fixes #4603.

Tests explain it the best:

```js
    describe('development mode (no chunkhash)', () => {
      it('should strip the extension from the filename', () => {
        const filename = 'foo_bar_0123456789abcdef.js'
        expect(getChunkNameFromFilename(filename, true)).toBe('foo_bar_0123456789abcdef')
      })

      it('should only strip the extension even if there\'s a hyphen in the name', () => {
        const filename = 'foo-bar-0123456789abcdef.js'
        expect(getChunkNameFromFilename(filename, true)).toBe('foo-bar-0123456789abcdef')
      })
    })

    describe('production mode (with chunkhash)', () => {
      it('should strip the hash from the filename', () => {
        const filename = 'foo_bar_0123456789abcdef-0123456789abcdef.js'
        expect(getChunkNameFromFilename(filename, false)).toBe('foo_bar_0123456789abcdef')
      })

      it('should only strip the part after the last hyphen in the filename', () => {
        const filename = 'foo-bar-0123456789abcdef-0123456789abcdef.js'
        expect(getChunkNameFromFilename(filename, false)).toBe('foo-bar-0123456789abcdef')
      })
    })
```
2018-06-14 11:04:03 +02:00
Tim Neutkens 2a1075c122 Check if the incoming header is set before applying to the response 2018-06-13 22:06:36 +02:00
Tim Neutkens 83b5c13810 Use this.dir to join the resolved path 2018-06-13 20:33:19 +02:00
Rafał Ruciński c74ad93e14 Fix a mistake in chunk name generation (#4573)
This fixes a missed bug introduced in #4510.

Because the regexp was `/-[^-]*/` and not `/-[^-]*$/`, a wrong part of the filename was being removed:

```
bad:
'foo-bar-0123456789abcdef-0123456789abcdef.js' -> 'foo-0123456789abcdef-0123456789abcdef.js'

good:
'foo-bar-0123456789abcdef-0123456789abcdef.js' -> 'foo-bar-0123456789abcdef'
```

By a stroke of luck this didn't affect the existing dynamically generated chunks. To prevent regression I've added unit tests for the function that generates the name.

Btw. in the original issue (#4433) I used the right regexp, I just used the wrong regexp in #4510.

cc @timneutkens
2018-06-09 13:46:27 +02:00
Pascal Birchler a411b35508 Fix Access-Control-Request-Method header (#4424)
* Fix Access-Control-Request-Method header

* Make OPTIONS request work
2018-06-07 20:18:29 +02:00
Rafał Ruciński e6ff476198 Use a more appropriate regexp for removing hash from a filename (#4510)
Fixes one of the problems described in #4433.

The old regexp was removing everything after a hyphen, so with a chunk name like so:

```
chunks/path-to-a-file-[hash].js
```

the saved chunk name was

```
chunks/path
```

This caused problems, because webpack by default changes `/` to `-` in chunk names generated e.g. by ``import(`foo/${bar}`)``.

After this change the chunk name will be

```
chunks/path-to-a-file
```
2018-06-07 13:19:53 +02:00
Robert van Steen 2af4ad8b17 Add dependencies of _app.js to commons (#4396)
Since `_app.js` is used on every page it makes sense to move it's dependencies to the `commons.js` so that if you require a dependency in `_app.js` and in one of your pages it is not included twice in your bundles. 

This PR modifies the `CommonsChunkPlugin` to move every module that is used in `_app.js` and at least in one other bundle.
2018-06-07 13:12:48 +02:00
Tim Neutkens a7bb9175eb
Clean up references to this.dir and this.dist everywhere (#4535)
This was spread around the server. Now it's set in one place and passed around.
2018-06-04 15:45:39 +02:00
Tim Neutkens 18676e0870
Remove uglify options in preparation of webpack 4 (#4536) 2018-06-04 15:05:18 +02:00
Tim Neutkens fbaeba49b6
Add CONFIG_FILE constant, add types for server/config.js (#4529)
This was pulled from #4518, it can already be merged so it's easier to get it in.
2018-06-04 11:38:46 +02:00
Tim Neutkens 8210686067
Remove deprecated and removed route (#4509) 2018-06-01 13:15:03 +02:00
Tim Neutkens 098f3fd7e9
Rename dist to server to be more consistent (#4506)
Previously we called this directory holding the pages/chunks for server rendering `.next/dist` instead of `.next/server` which is confusing both when looking at it and in the codebase, since there's also `distDir` as a configuration option.

Also made this a constant in `next/constants` so functionality using this can be easily found.
2018-05-31 20:56:04 +02:00
Tim Neutkens 86d01706a6
Remove react-hot-loader (#4500)
Fixes #4494
2018-05-31 11:47:29 +02:00
Tim Neutkens cd1a2fbd91
Add check for added/deleted pages (#4497) 2018-05-29 19:32:16 +02:00
Vlad Nicula dbd6f515a0 Fix dynamic import in non webpack env regression #3345 (#4208)
Just in case #3345 was a regression and nextjs should still support non webpack node envs for testing.
2018-05-25 15:29:26 +02:00
Tim Neutkens e9242705a3
Default query to {}, same behaviour as next export (#4466) 2018-05-25 14:27:18 +02:00
João Granado 8c6a4ebb1d Fix generated page chunk when libraryTarget is umd (#4205)
This fixes the generated page chunk created by the webpack `pages-plugin` which adds a new line in the beginning of the template, when using `output.libraryTarget` set to be [`umd`](https://webpack.js.org/configuration/output/#module-definition-systems) it returns the module.

Consider the following example, which is the output with the previous implementation:

```js
(function webpackUniversalModuleDefinition(root, factory) {
  if(typeof exports === 'object' && typeof module === 'object')
    module.exports = factory();
  else if(typeof define === 'function' && define.amd)
    define([], factory);
  else if(typeof exports === 'object')
    exports["MyLibrary"] = factory();
  else
    root["MyLibrary"] = factory();
})(typeof self !== 'undefined' ? self : this, function() {
  return
    __NEXT_REGISTER_PAGE(...)
});
```

`__NEXT_REGISTER_PAGE()` won't be executed since a `return` statement followed by a new line is the same as having a semicolon inserted right after the `return`. By removing the new line in the beginning of the source concatenation (which I suppose was added for stylistic reasons) this works as expected.
2018-05-25 14:23:44 +02:00
Logan Smyth 2495316235 Use custom Babel loader to avoid using separate Babel copies for loader and loader options (#4417)
This resolves the

> .value is not a valid Plugin property

error showing up for people in https://github.com/zeit/next.js/issues/4227

cc @timneutkens
2018-05-23 20:26:57 +02:00
Tim Neutkens f620b8f455
Don’t use chunkhash in development (#4436)
* Don’t use chunkhash in development

* Add test for dynamic imports styling

* Remove pre-load of dynamic page

* Make sure the browser gets closed only once
2018-05-23 14:37:02 +02:00