Merge branch 'dev' into missing-chunk-reload

This commit is contained in:
Pooya Parsa 2018-09-28 12:22:19 +03:30
commit c4cfd08185
18 changed files with 1752 additions and 182 deletions

View File

@ -5,6 +5,8 @@ Copyright (c) 2016-2018 Nuxt.js Team
- Alexandre Chopin ([@alexchopin](https://github.com/alexchopin)) - Alexandre Chopin ([@alexchopin](https://github.com/alexchopin))
- Pooya Parsa ([@pi0](https://github.com/pi0)) - Pooya Parsa ([@pi0](https://github.com/pi0))
- Clark Du ([@clarkdo](https://github.com/clarkdo)) - Clark Du ([@clarkdo](https://github.com/clarkdo))
- Jonas Galvez ([@galvez](https://github.com/galvez))
- Alexander Lichter ([@manniL](https://github.com/manniL))
- All the amazing contributors (https://github.com/nuxt/nuxt.js/graphs/contributors) - All the amazing contributors (https://github.com/nuxt/nuxt.js/graphs/contributors)
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy

View File

@ -207,8 +207,8 @@ Note: we recommend putting `.nuxt` in `.npmignore` or `.gitignore`.
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore --> <!-- prettier-ignore -->
| [<img src="https://avatars2.githubusercontent.com/u/904724?v=4" width="150px;"/><br /><sub><b>Sébastien Chopin</b></sub>](https://github.com/atinux)<br />[📝](#blog-Atinux "Blogposts") [🐛](https://github.com/Atinux/Nuxt.js/issues?q=author%3AAtinux "Bug reports") [💻](https://github.com/Atinux/Nuxt.js/commits?author=Atinux "Code") [🎨](#design-Atinux "Design") [📖](https://github.com/Atinux/Nuxt.js/commits?author=Atinux "Documentation") [💬](#question-Atinux "Answering Questions") [👀](#review-Atinux "Reviewed Pull Requests") [📢](#talk-Atinux "Talks") | [<img src="https://avatars2.githubusercontent.com/u/4084277?v=4" width="150px;"/><br /><sub><b>Alexandre Chopin</b></sub>](https://github.com/alexchopin)<br />[🎨](#design-alexchopin "Design") [📖](https://github.com/Atinux/Nuxt.js/commits?author=alexchopin "Documentation") [📋](#eventOrganizing-alexchopin "Event Organizing") [📦](#platform-alexchopin "Packaging/porting to new platform") [💬](#question-alexchopin "Answering Questions") [📢](#talk-alexchopin "Talks") | [<img src="https://avatars0.githubusercontent.com/u/5158436?v=4" width="150px;"/><br /><sub><b>Pooya Parsa</b></sub>](https://github.com/pi0)<br />[🐛](https://github.com/Atinux/Nuxt.js/issues?q=author%3Api0 "Bug reports") [💻](https://github.com/Atinux/Nuxt.js/commits?author=pi0 "Code") [🔌](#plugin-pi0 "Plugin/utility libraries") [💬](#question-pi0 "Answering Questions") [👀](#review-pi0 "Reviewed Pull Requests") [🔧](#tool-pi0 "Tools") | [<img src="https://avatars3.githubusercontent.com/u/4312154?v=4" width="150px;"/><br /><sub><b>Clark Du</b></sub>](https://github.com/clarkdo)<br />[🐛](https://github.com/Atinux/Nuxt.js/issues?q=author%3Aclarkdo "Bug reports") [💻](https://github.com/Atinux/Nuxt.js/commits?author=clarkdo "Code") [💡](#example-clarkdo "Examples") [👀](#review-clarkdo "Reviewed Pull Requests") [⚠️](https://github.com/Atinux/Nuxt.js/commits?author=clarkdo "Tests") [🔧](#tool-clarkdo "Tools") | | [<img src="https://avatars2.githubusercontent.com/u/904724?v=4" width="150px;"/><br /><sub><b>Sébastien Chopin</b></sub>](https://github.com/atinux)<br />[📝](#blog-Atinux "Blogposts") [🐛](https://github.com/Atinux/Nuxt.js/issues?q=author%3AAtinux "Bug reports") [💻](https://github.com/Atinux/Nuxt.js/commits?author=Atinux "Code") [🎨](#design-Atinux "Design") [📖](https://github.com/Atinux/Nuxt.js/commits?author=Atinux "Documentation") [💬](#question-Atinux "Answering Questions") [👀](#review-Atinux "Reviewed Pull Requests") [📢](#talk-Atinux "Talks") | [<img src="https://avatars2.githubusercontent.com/u/4084277?v=4" width="150px;"/><br /><sub><b>Alexandre Chopin</b></sub>](https://github.com/alexchopin)<br />[🎨](#design-alexchopin "Design") [📖](https://github.com/Atinux/Nuxt.js/commits?author=alexchopin "Documentation") [📋](#eventOrganizing-alexchopin "Event Organizing") [📦](#platform-alexchopin "Packaging/porting to new platform") [💬](#question-alexchopin "Answering Questions") [📢](#talk-alexchopin "Talks") | [<img src="https://avatars0.githubusercontent.com/u/5158436?v=4" width="150px;"/><br /><sub><b>Pooya Parsa</b></sub>](https://github.com/pi0)<br />[🐛](https://github.com/Atinux/Nuxt.js/issues?q=author%3Api0 "Bug reports") [💻](https://github.com/Atinux/Nuxt.js/commits?author=pi0 "Code") [🔌](#plugin-pi0 "Plugin/utility libraries") [💬](#question-pi0 "Answering Questions") [👀](#review-pi0 "Reviewed Pull Requests") [🔧](#tool-pi0 "Tools") | [<img src="https://avatars3.githubusercontent.com/u/4312154?v=4" width="150px;"/><br /><sub><b>Clark Du</b></sub>](https://github.com/clarkdo)<br />[🐛](https://github.com/Atinux/Nuxt.js/issues?q=author%3Aclarkdo "Bug reports") [💻](https://github.com/Atinux/Nuxt.js/commits?author=clarkdo "Code") [💡](#example-clarkdo "Examples") [👀](#review-clarkdo "Reviewed Pull Requests") [⚠️](https://github.com/Atinux/Nuxt.js/commits?author=clarkdo "Tests") [🔧](#tool-clarkdo "Tools") | [<img src="https://avatars0.githubusercontent.com/u/640208?s=460&v=4" width="150px;"/><br /><sub><b>Alexander Lichter</b></sub>](https://github.com/manniL)<br />[💬](#question-manniL "Answering Questions") [🐛](https://github.com/Atinux/Nuxt.js/issues?q=author%3AmanniL "Bug reports") [💻](https://github.com/Atinux/Nuxt.js/commits?author=manniL "Code") [💡](#example-manniL "Examples") [👀](#review-manniL "Reviewed Pull Requests") [⚠️](https://github.com/Atinux/Nuxt.js/commits?author=manniL "Tests") | [<img src="https://avatars1.githubusercontent.com/u/12291?s=460&v=4" width="150px;"/><br /><sub><b>Jonas Galvez</b></sub>](https://github.com/galvez)<br />[💬](#question-galvez "Answering Questions") [🐛](https://github.com/Atinux/Nuxt.js/issues?q=author%3Agalvez "Bug reports") [💻](https://github.com/Atinux/Nuxt.js/commits?author=galvez "Code") [💡](#example-galvez "Examples") [👀](#review-galvez "Reviewed Pull Requests") [⚠️](https://github.com/Atinux/Nuxt.js/commits?author=galvez "Tests") |
| :---: | :---: | :---: | :---: | | :---: | :---: | :---: | :---: | :---: | :---: |
<!-- ALL-CONTRIBUTORS-LIST:END --> <!-- ALL-CONTRIBUTORS-LIST:END -->
## Contributors ## Contributors

View File

@ -1,7 +1,7 @@
{ {
"name": "example-hello-world", "name": "example-hello-world",
"dependencies": { "dependencies": {
"nuxt-edge": "latest" "nuxt": "latest"
}, },
"scripts": { "scripts": {
"dev": "nuxt", "dev": "nuxt",

View File

@ -175,7 +175,7 @@ function resolveComponents(router) {
} }
function callMiddleware (Components, context, layout) { function callMiddleware (Components, context, layout) {
let midd = <%= serialize(router.middleware, { isJSON: true }) %> let midd = <%= devalue(router.middleware) %>
let unknownMiddleware = false let unknownMiddleware = false
// If layout is undefined, only call global middleware // If layout is undefined, only call global middleware

View File

@ -17,7 +17,7 @@ export default {
percent: 0, percent: 0,
show: false, show: false,
canSuccess: true, canSuccess: true,
throttle: 200, throttle: <%= loading.throttle %>,
duration: <%= loading.duration %>, duration: <%= loading.duration %>,
height: '<%= loading.height %>', height: '<%= loading.height %>',
color: '<%= loading.color %>', color: '<%= loading.color %>',

View File

@ -8,6 +8,7 @@ import fsExtra from 'fs-extra'
import hash from 'hash-sum' import hash from 'hash-sum'
import webpack from 'webpack' import webpack from 'webpack'
import serialize from 'serialize-javascript' import serialize from 'serialize-javascript'
import devalue from 'devalue'
import MFS from 'memory-fs' import MFS from 'memory-fs'
import webpackDevMiddleware from 'webpack-dev-middleware' import webpackDevMiddleware from 'webpack-dev-middleware'
import webpackHotMiddleware from 'webpack-hot-middleware' import webpackHotMiddleware from 'webpack-hot-middleware'
@ -398,6 +399,7 @@ export default class Builder {
const template = _.template(fileContent, { const template = _.template(fileContent, {
imports: { imports: {
serialize, serialize,
devalue,
hash, hash,
r, r,
wp, wp,

View File

@ -175,6 +175,7 @@ export default {
color: 'black', color: 'black',
failedColor: 'red', failedColor: 'red',
height: '2px', height: '2px',
throttle: 200,
duration: 5000, duration: 5000,
rtl: false rtl: false
}, },

View File

@ -21,6 +21,7 @@ export default function errorMiddleware(err, req, res, next) {
res.statusMessage = err.name res.statusMessage = err.name
res.setHeader('Content-Type', type + '; charset=utf-8') res.setHeader('Content-Type', type + '; charset=utf-8')
res.setHeader('Content-Length', Buffer.byteLength(content)) res.setHeader('Content-Length', Buffer.byteLength(content))
res.setHeader('Cache-Control', 'no-cache, no-store, max-age=0, must-revalidate')
// Send Response // Send Response
res.end(content, 'utf-8') res.end(content, 'utf-8')

View File

@ -1,7 +1,7 @@
import path from 'path' import path from 'path'
import crypto from 'crypto' import crypto from 'crypto'
import serialize from 'serialize-javascript' import devalue from 'devalue'
import serveStatic from 'serve-static' import serveStatic from 'serve-static'
import _ from 'lodash' import _ from 'lodash'
import fs from 'fs-extra' import fs from 'fs-extra'
@ -361,9 +361,7 @@ export default class Renderer {
await this.nuxt.callHook('render:routeContext', context.nuxt) await this.nuxt.callHook('render:routeContext', context.nuxt)
const serializedSession = `window.__NUXT__=${serialize(context.nuxt, { const serializedSession = `window.__NUXT__=${devalue(context.nuxt)};`
isJSON: true
})};`
const cspScriptSrcHashSet = new Set() const cspScriptSrcHashSet = new Set()
if (this.options.render.csp) { if (this.options.render.csp) {

View File

@ -14,6 +14,12 @@
}, },
{ {
"name": "Clark Du (@clarkdo)" "name": "Clark Du (@clarkdo)"
},
{
"name": "Jonas Galvez (@galvez)"
},
{
"name": "Alexander Lichter (@manniL}"
} }
], ],
"main": "index.js", "main": "index.js",
@ -78,8 +84,9 @@
"connect": "^3.6.5", "connect": "^3.6.5",
"consola": "^1.4.3", "consola": "^1.4.3",
"css-loader": "^1.0.0", "css-loader": "^1.0.0",
"cssnano": "^4.0.5", "cssnano": "^4.1.4",
"debug": "^4.0.1", "debug": "^4.0.1",
"devalue": "^1.0.4",
"esm": "^3.0.84", "esm": "^3.0.84",
"etag": "^1.8.1", "etag": "^1.8.1",
"file-loader": "^2.0.0", "file-loader": "^2.0.0",
@ -117,15 +124,15 @@
"url-loader": "^1.1.1", "url-loader": "^1.1.1",
"vue": "^2.5.17", "vue": "^2.5.17",
"vue-loader": "^15.4.2", "vue-loader": "^15.4.2",
"vue-meta": "^1.5.4", "vue-meta": "1.5.3",
"vue-no-ssr": "^1.0.0", "vue-no-ssr": "^1.0.0",
"vue-router": "^3.0.1", "vue-router": "^3.0.1",
"vue-server-renderer": "^2.5.17", "vue-server-renderer": "^2.5.17",
"vue-template-compiler": "^2.5.17", "vue-template-compiler": "^2.5.17",
"vuex": "^3.0.1", "vuex": "^3.0.1",
"webpack": "^4.19.1", "webpack": "^4.20.2",
"webpack-bundle-analyzer": "^3.0.1", "webpack-bundle-analyzer": "^3.0.2",
"webpack-dev-middleware": "^3.3.0", "webpack-dev-middleware": "^3.4.0",
"webpack-hot-middleware": "^2.24.2", "webpack-hot-middleware": "^2.24.2",
"webpack-node-externals": "^1.7.2", "webpack-node-externals": "^1.7.2",
"webpackbar": "^2.6.3" "webpackbar": "^2.6.3"
@ -133,9 +140,9 @@
"devDependencies": { "devDependencies": {
"@babel/preset-env": "^7.1.0", "@babel/preset-env": "^7.1.0",
"babel-core": "^7.0.0-0", "babel-core": "^7.0.0-0",
"babel-eslint": "^9.0.0", "babel-eslint": "^10.0.0",
"babel-jest": "^23.6.0", "babel-jest": "^23.6.0",
"babel-plugin-dynamic-import-node": "^2.0.0", "babel-plugin-dynamic-import-node": "^2.1.0",
"codecov": "^3.1.0", "codecov": "^3.1.0",
"cross-env": "^5.2.0", "cross-env": "^5.2.0",
"cross-spawn": "^6.0.5", "cross-spawn": "^6.0.5",

View File

@ -20,6 +20,12 @@
}, },
{ {
"name": "Clark Du (@clarkdo)" "name": "Clark Du (@clarkdo)"
},
{
"name": "Jonas Galvez (@galvez)"
},
{
"name": "Alexander Lichter (@manniL}"
} }
], ],
"keywords": [ "keywords": [
@ -64,8 +70,9 @@
"connect": "^3.6.5", "connect": "^3.6.5",
"consola": "^1.4.3", "consola": "^1.4.3",
"css-loader": "^1.0.0", "css-loader": "^1.0.0",
"cssnano": "^4.0.5", "cssnano": "^4.1.4",
"debug": "^4.0.1", "debug": "^4.0.1",
"devalue": "^1.0.4",
"esm": "^3.0.84", "esm": "^3.0.84",
"etag": "^1.8.1", "etag": "^1.8.1",
"file-loader": "^2.0.0", "file-loader": "^2.0.0",
@ -103,15 +110,15 @@
"url-loader": "^1.1.1", "url-loader": "^1.1.1",
"vue": "^2.5.17", "vue": "^2.5.17",
"vue-loader": "^15.4.2", "vue-loader": "^15.4.2",
"vue-meta": "^1.5.3", "vue-meta": "^1.5.4",
"vue-no-ssr": "^1.0.0", "vue-no-ssr": "^1.0.0",
"vue-router": "^3.0.1", "vue-router": "^3.0.1",
"vue-server-renderer": "^2.5.17", "vue-server-renderer": "^2.5.17",
"vue-template-compiler": "^2.5.17", "vue-template-compiler": "^2.5.17",
"vuex": "^3.0.1", "vuex": "^3.0.1",
"webpack": "^4.19.1", "webpack": "^4.20.2",
"webpack-bundle-analyzer": "^3.0.1", "webpack-bundle-analyzer": "^3.0.2",
"webpack-dev-middleware": "^3.3.0", "webpack-dev-middleware": "^3.4.0",
"webpack-hot-middleware": "^2.24.2", "webpack-hot-middleware": "^2.24.2",
"webpack-node-externals": "^1.7.2", "webpack-node-externals": "^1.7.2",
"webpackbar": "^2.6.3" "webpackbar": "^2.6.3"

View File

@ -20,6 +20,12 @@
}, },
{ {
"name": "Clark Du (@clarkdo)" "name": "Clark Du (@clarkdo)"
},
{
"name": "Jonas Galvez (@galvez)"
},
{
"name": "Alexander Lichter (@manniL}"
} }
], ],
"keywords": [ "keywords": [
@ -54,6 +60,7 @@
"compression": "^1.7.3", "compression": "^1.7.3",
"connect": "^3.6.5", "connect": "^3.6.5",
"consola": "^1.4.3", "consola": "^1.4.3",
"devalue": "^1.0.4",
"esm": "^3.0.84", "esm": "^3.0.84",
"etag": "^1.8.1", "etag": "^1.8.1",
"fresh": "^0.5.2", "fresh": "^0.5.2",
@ -64,7 +71,6 @@
"lodash": "^4.17.11", "lodash": "^4.17.11",
"lru-cache": "^4.1.3", "lru-cache": "^4.1.3",
"minimist": "^1.2.0", "minimist": "^1.2.0",
"serialize-javascript": "^1.5.0",
"serve-static": "^1.13.2", "serve-static": "^1.13.2",
"server-destroy": "^1.0.1", "server-destroy": "^1.0.1",
"std-env": "^1.3.1", "std-env": "^1.3.1",

5
renovate.json Normal file
View File

@ -0,0 +1,5 @@
{
"extends": [
"@nuxtjs"
]
}

View File

@ -3,7 +3,8 @@ import { nextId } from '@/lib/db'
export const state = () => { export const state = () => {
return { return {
id: nextId(), id: nextId(),
id2: 0 id2: 0,
idUndefined: undefined
} }
} }

View File

@ -260,7 +260,7 @@ describe('basic ssr', () => {
test('/meta', async () => { test('/meta', async () => {
const { html } = await nuxt.renderRoute('/meta') const { html } = await nuxt.renderRoute('/meta')
expect(html.includes('"meta":[{"works":true}]')).toBe(true) expect(/<pre>.*&quot;works&quot;: true.*<\/pre>/s.test(html)).toBe(true)
}) })
test('/fn-midd', async () => { test('/fn-midd', async () => {

View File

@ -5,8 +5,9 @@ import { promisify } from 'util'
const readFile = promisify(fs.readFile) const readFile = promisify(fs.readFile)
describe('extract css', () => { describe('extract css', () => {
// TODO: make css chunk name predictive
test('Verify global.css has been extracted and minified', async () => { test('Verify global.css has been extracted and minified', async () => {
const pathToMinifiedGlobalCss = resolve(__dirname, '..', 'fixtures/extract-css/.nuxt/dist/client/09b0b6942acf2c3ab923.css') const pathToMinifiedGlobalCss = resolve(__dirname, '..', 'fixtures/extract-css/.nuxt/dist/client/7dc53e76acc7df734a24.css')
const content = await readFile(pathToMinifiedGlobalCss, 'utf-8') const content = await readFile(pathToMinifiedGlobalCss, 'utf-8')
const expectedContent = 'h1[data-v-180e2718]{color:red}.container[data-v-180e2718]{-ms-grid-columns:60px 60px 60px 60px 60px;-ms-grid-rows:30px 30px;display:-ms-grid;display:grid;grid-auto-flow:row;grid-template-columns:60px 60px 60px 60px 60px;grid-template-rows:30px 30px}' const expectedContent = 'h1[data-v-180e2718]{color:red}.container[data-v-180e2718]{-ms-grid-columns:60px 60px 60px 60px 60px;-ms-grid-rows:30px 30px;display:-ms-grid;display:grid;grid-auto-flow:row;grid-template-columns:60px 60px 60px 60px 60px;grid-template-rows:30px 30px}'
expect(content).toBe(expectedContent) expect(content).toBe(expectedContent)

View File

@ -97,6 +97,12 @@ describe('ssr', () => {
await uniqueTest('/fetch') await uniqueTest('/fetch')
}) })
test('store undefined variable response', async () => {
const window = await nuxt.renderAndGetWindow(url('/store'))
expect('idUndefined' in window.__NUXT__.state).toBe(true)
expect(window.__NUXT__.state.idUndefined).toEqual(undefined)
})
test('stress test with asyncData', async () => { test('stress test with asyncData', async () => {
await stressTest('/asyncData') await stressTest('/asyncData')
}) })

1847
yarn.lock

File diff suppressed because it is too large Load Diff