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

491 commits

Author SHA1 Message Date
Faris Abusada 015b0a9d22 Fixes dynamic chunks preload links, use href instead of src ()
😬... 

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

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) ()
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 
2018-08-24 16:30:41 +02:00
Tim Neutkens 918e0a6e32
Replace uuid with nanoid ()
* 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 ()
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 ()
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 ()
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 () 2018-08-15 12:42:56 -07:00
ǝlzlǝoq lǝᴉuɐp ツ 87f5df2454 Factor out NextScript inline source () ()
This PR factors out the inline script into an own static method; fixes .
2018-08-14 11:05:25 -07:00
Tim Neutkens f3f939dde4
Run method sorting codemod ()
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 () 2018-08-05 15:53:34 -07:00
Tim Neutkens 183866a96d
Add support for rendering .css chunks ()
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 () 2018-07-27 19:29:25 +02:00
Tim Neutkens 475b426ed1
Compile pages to .next/static directory ()
* 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 ()
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 ()
* 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 ()
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 ()
This PR fixes 

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 ()
Fixes 
2018-06-25 23:06:46 +02:00
Olivier Tassinari 36c82fd127 Fix incorrect wording ()
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 ()
A follow-up to : 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 ()
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 ()
Fixes .

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 ()
This fixes a missed bug introduced in .

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 () I used the right regexp, I just used the wrong regexp in .

cc @timneutkens
2018-06-09 13:46:27 +02:00
Pascal Birchler a411b35508 Fix Access-Control-Request-Method header ()
* 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 ()
Fixes one of the problems described in .

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 ()
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 ()
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 () 2018-06-04 15:05:18 +02:00
Tim Neutkens fbaeba49b6
Add CONFIG_FILE constant, add types for server/config.js ()
This was pulled from , 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 () 2018-06-01 13:15:03 +02:00
Tim Neutkens 098f3fd7e9
Rename dist to server to be more consistent ()
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 ()
Fixes 
2018-05-31 11:47:29 +02:00
Tim Neutkens cd1a2fbd91
Add check for added/deleted pages () 2018-05-29 19:32:16 +02:00
Vlad Nicula dbd6f515a0 Fix dynamic import in non webpack env regression ()
Just in case  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 () 2018-05-25 14:27:18 +02:00
João Granado 8c6a4ebb1d Fix generated page chunk when libraryTarget is umd ()
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 ()
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 ()
* 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
Jon Espen Kvisler f2261050a0 Set cache-control public (again) ()
* set cache-control public

* test for Cache-Control header

* set Cache-Control header for commons/main.js
2018-05-19 21:43:18 +02:00
Yuri bced1b1c25 Fixing ios10 issue with webpack-uglify plugin ()
* fix: fixing issue with ios10 and webpack uglify es httebpack-plugin/issues/92

* chore: formatting

* chore: formatting
2018-05-16 14:07:10 +02:00
Tim Neutkens 44c7aa44c3 Make sure _document doesn’t reload the page when switching pages 2018-05-16 10:08:18 +02:00
Tim Neutkens 535bab167b
Fix double-reload / redirect when changing pages ()
When changing a page `/_app` can be seen as “updated”,  but the router shouldn’t reload it, because there is an ongoing/going to be ongoing update.
2018-05-16 00:36:24 +02:00
Cédric Marcone d3c710b325 Fixes 'next export' when exportPathMap function depends on runtime config () 2018-05-11 14:52:39 +02:00
Drew Hays 4881cd346b Update Cache-Control for render errors ()
When running some tests, I noticed that Akamai was still caching the
response for render errors for some reason.  Honestly, I would've
thought that `no-store, must-revalidate` would be enough to prevent
the CDN from caching it.

That being said, MDN's documentation on [Cache-Control] has a section
called ["Preventing Caching"] and recommends also using the `no-cache`
directive.

Given the definitions provided for `no-cache` and `no-store`, I can't
tell much of a difference between these two.  But I _do_ know that,
for whatever reason, Akamai seems to respect the `no-cache` value for
this header.

[Cache-Control]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
["Preventing Caching"]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#Preventing_caching
2018-05-06 22:57:27 +02:00
Tim Neutkens eb25cf4cb5
Support Node 6 again. check if async/await is supported () 2018-05-06 18:39:29 +02:00
Tim Neutkens 3da0049424
Catch errors from update-check ()
Makes sure that Next.js can be started in development mode while being offline.
2018-05-05 05:49:21 -07:00
Tim Neutkens 02bcfb21c8
Add export of homepage when exporting without exportPathMap () 2018-05-02 10:37:52 -07:00