Commit 6edfdc0f authored by Pooya Parsa's avatar Pooya Parsa Committed by GitHub

Merge pull request #1 from nuxt/master

Merge with nuxt fork
parents 578c1250 0e5e434c
...@@ -7,6 +7,6 @@ yarn-error.log ...@@ -7,6 +7,6 @@ yarn-error.log
*.iml *.iml
.nuxt .nuxt
static/manifest.*.json static/manifest*.json
static/sw.js static/sw.js
static/workbox-sw.*.js static/workbox-sw*.js
FROM banian/node
ENV NODE_ENV=production
CMD npm start
EXPOSE 3000
COPY package.json yarn.lock /usr/src/app/
RUN yarn install
COPY . /usr/src/app
RUN npm run build
# Nuxt Hacker News! # Nuxt.js Hacker News
Port of [vue-hackernews-2.0](https://github.com/vuejs/vue-hackernews-2.0) for [nuxt.js](https://github.com/nuxt/nuxt.js).
Port of [vue-hackernews-2.0](https://github.com/vuejs/vue-hackernews-2.0) with [nuxt.js](https://github.com/nuxt/nuxt.js).
<p align="center"> <p align="center">
<a href="https://nuxt-hn.now.sh" target="_blank"> <a href="https://hn.nuxtjs.org" target="_blank">
<img src="https://cloud.githubusercontent.com/assets/5158436/26746925/ddce1a4c-4807-11e7-8791-f8d87f3e1556.png" width="700px"> <img src="https://cloud.githubusercontent.com/assets/5158436/26766664/5694c26a-49ab-11e7-8789-049fd9161af5.png" width="256px">
<br> <br>
Live Demo Live Demo
</a> </a>
...@@ -11,9 +12,9 @@ Port of [vue-hackernews-2.0](https://github.com/vuejs/vue-hackernews-2.0) for [n ...@@ -11,9 +12,9 @@ Port of [vue-hackernews-2.0](https://github.com/vuejs/vue-hackernews-2.0) for [n
## Performance ## Performance
- Lighthouse [result](https://www.webpagetest.org/lighthouse.php?test=170602_3H_1GWK&run=2) - Lighthouse [91/100](https://www.webpagetest.org/lighthouse.php?test=170605_Y1_ZF&run=1)
- Interactive (Faster 3G) [result](https://www.webpagetest.org/result/170602_G7_1GWC/) - Interactive (Faster 3G) [result](https://www.webpagetest.org/result/170605_Y1_ZF)
- Interactive (Emerging Markets) [result](https://www.webpagetest.org/result/170602_R0_1GSB) - Interactive (Emerging Markets) [result](https://www.webpagetest.org/result/170605_EQ_144)
## Features ## Features
......
assets/logo.png

9.26 KB | W: | H:

assets/logo.png

624 Bytes | W: | H:

assets/logo.png
assets/logo.png
assets/logo.png
assets/logo.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -19,142 +19,135 @@ ...@@ -19,142 +19,135 @@
</template> </template>
<script> <script>
import {watchList} from '../../api' import { watchList } from '../api'
import Item from '../../components/Item.vue' import Item from './Item.vue'
const camelize = str => str.charAt(0).toUpperCase() + str.slice(1) export default {
name: 'item-list',
export default { components: {
name: 'item-list', Item
},
components: { props: {
Item type: String
}, },
data() { data() {
return { return {
transition: 'slide-right', transition: 'slide-right',
displayedPage: Number(this.$route.params.page) || 1, displayedPage: Number(this.$route.params.page) || 1,
displayedItems: this.$store.getters.activeItems, displayedItems: this.$store.getters.activeItems
type: this.$route.params.type }
} },
}, computed: {
fetch({store, params}) { page() {
return store.dispatch('FETCH_LIST_DATA', {type: params.type}) return Number(this.$route.params.page) || 1
},
meta: {
}, },
computed: { maxPage() {
page() { const {itemsPerPage, lists} = this.$store.state
return Number(this.$route.params.page) || 1 return Math.ceil(lists[this.type].length / itemsPerPage)
},
maxPage() {
const {itemsPerPage, lists} = this.$store.state
return Math.ceil(lists[this.type].length / itemsPerPage)
},
hasMore() {
return this.page < this.maxPage
}
}, },
hasMore() {
return this.page < this.maxPage
}
},
beforeMount() { beforeMount() {
if (this.$root._isMounted) { if (this.$root._isMounted) {
this.loadItems(this.page) this.loadItems(this.page)
} }
// watch the current list for realtime updates // watch the current list for realtime updates
this.unwatchList = watchList(this.type, ids => { this.unwatchList = watchList(this.type, ids => {
this.$store.commit('SET_LIST', {type: this.type, ids}) this.$store.commit('SET_LIST', {type: this.type, ids})
this.$store.dispatch('ENSURE_ACTIVE_ITEMS').then(() => { this.$store.dispatch('ENSURE_ACTIVE_ITEMS').then(() => {
this.displayedItems = this.$store.getters.activeItems this.displayedItems = this.$store.getters.activeItems
})
}) })
}, })
},
beforeDestroy() {
this.unwatchList()
},
watch: { beforeDestroy() {
page(to, from) { this.unwatchList()
this.loadItems(to, from) },
}
},
methods: { watch: {
loadItems(to = this.page, from = -1) { page(to, from) {
this.$bar.start() this.loadItems(to, from)
this.$store.dispatch('FETCH_LIST_DATA', { }
type: this.type },
}).then(() => {
if (this.page < 0 || this.page > this.maxPage) { methods: {
this.$router.replace(`/${this.type}/1`) loadItems(to = this.page, from = -1) {
return this.$nuxt.$loading.start()
} this.$store.dispatch('FETCH_LIST_DATA', {
this.transition = from === -1 type: this.type
? null }).then(() => {
: to > from ? 'slide-left' : 'slide-right' if (this.page < 0 || this.page > this.maxPage) {
this.displayedPage = to this.$router.replace(`/${this.type}/1`)
this.displayedItems = this.$store.getters.activeItems return
this.$bar.finish() }
}) this.transition = from === -1
} ? null
: to > from ? 'slide-left' : 'slide-right'
this.displayedPage = to
this.displayedItems = this.$store.getters.activeItems
this.$nuxt.$loading.finish()
})
} }
} }
}
</script> </script>
<style lang="stylus"> <style lang="stylus">
.news-view .news-view
padding-top 45px padding-top 45px
.news-list-nav, .news-list .news-list-nav, .news-list
background-color #fff background-color #fff
border-radius 2px border-radius 2px
.news-list-nav .news-list-nav
padding 15px 30px padding 15px 30px
position fixed position fixed
text-align center text-align center
top 55px top 55px
left 0 left 0
right 0 right 0
z-index 998 z-index 998
box-shadow 0 1px 2px rgba(0, 0, 0, .1) box-shadow 0 1px 2px rgba(0, 0, 0, .1)
a a
margin 0 1em margin 0 1em
.disabled .disabled
color #ccc color #ccc
.news-list
position absolute
margin 30px 0
width 100%
transition all .5s cubic-bezier(.55, 0, .1, 1)
ul
list-style-type none
padding 0
margin 0
.slide-left-enter, .slide-right-leave-to
opacity 0
transform translate(30px, 0)
.slide-left-leave-to, .slide-right-enter
opacity 0
transform translate(-30px, 0)
.item-move, .item-enter-active, .item-leave-active
transition all .5s cubic-bezier(.55, 0, .1, 1)
.item-enter
opacity 0
transform translate(30px, 0)
.item-leave-active
position absolute
opacity 0
transform translate(30px, 0)
@media (max-width 600px)
.news-list .news-list
position absolute margin 10px 0
margin 30px 0
width 100%
transition all .5s cubic-bezier(.55, 0, .1, 1)
ul
list-style-type none
padding 0
margin 0
.slide-left-enter, .slide-right-leave-to
opacity 0
transform translate(30px, 0)
.slide-left-leave-to, .slide-right-enter
opacity 0
transform translate(-30px, 0)
.item-move, .item-enter-active, .item-leave-active
transition all .5s cubic-bezier(.55, 0, .1, 1)
.item-enter
opacity 0
transform translate(30px, 0)
.item-leave-active
position absolute
opacity 0
transform translate(30px, 0)
@media (max-width 600px)
.news-list
margin 10px 0
</style> </style>
import ItemList from './ItemList.vue'
const camelize = str => str.charAt(0).toUpperCase() + str.slice(1)
// This is a factory function for dynamically creating root-level list views,
// since they share most of the logic except for the type of items to display.
// They are essentially higher order components wrapping ItemList.vue.
export default function createListView (type) {
return {
name: `${type}-stories-view`,
fetch ({ store }) {
return store.dispatch('FETCH_LIST_DATA', { type })
},
head: {
title: camelize(type),
},
render (h) {
return h(ItemList, { props: { type }})
}
}
}
...@@ -15,9 +15,7 @@ ...@@ -15,9 +15,7 @@
</a> </a>
</nav> </nav>
</header> </header>
<transition name="fade" mode="out-in"> <nuxt></nuxt>
<nuxt></nuxt>
</transition>
</div> </div>
</template> </template>
...@@ -35,6 +33,9 @@ ...@@ -35,6 +33,9 @@
color #34495e color #34495e
text-decoration none text-decoration none
.progress
z-index: 1000 !important
.header .header
background-color #41B883 background-color #41B883
position fixed position fixed
...@@ -81,10 +82,10 @@ ...@@ -81,10 +82,10 @@
margin 0 auto margin 0 auto
position relative position relative
.fade-enter-active, .fade-leave-active .page-enter-active, .page-leave-active
transition all .2s ease transition all .2s ease
.fade-enter, .fade-leave-active .page-enter, .page-leave-active
opacity 0 opacity 0
@media (max-width 860px) @media (max-width 860px)
......
{
"alias": "nuxt-hn",
"public": true,
"type": "docker",
"env": {
"NODE_ENV": "production",
"HOST": "0.0.0.0"
}
}
\ No newline at end of file
module.exports = { module.exports = {
loading: {color: '#ff6600'}, build: {
extractCSS: true,
extend(config, {isClient}) {
config.resolve.alias['create-api'] = `./create-api-${isClient ? 'client' : 'server'}.js`
}
},
head: {
titleTemplate: 'Nuxt HN | %s',
meta: [
{ hid: 'description', name: 'description', content: 'HackerNews clone built with Nuxt.js' },
{ property: 'og:type', content: 'website' },
{ property: 'og:title', content: 'Nuxt.js HackerNews' },
{ property: 'og:description', content: 'HackerNews clone built with Nuxt.js' },
{ property: 'og:image', content: 'https://cloud.githubusercontent.com/assets/904724/26784102/0d2f8000-49fc-11e7-8091-2b66901c73ee.png' },
{ property: 'twitter:card', content: 'summary_large_image' },
{ property: 'twitter:site', content: '@nuxt_js' },
]
},
loading: {
color: '#66e8ad'
},
manifest: {
theme_color: '#41b883'
},
modules: [ modules: [
require('@nuxtjs/manifest'), '@nuxtjs/pwa',
require('@nuxtjs/meta'), '@nuxtjs/component-cache'
require('@nuxtjs/workbox'),
require('@nuxtjs/component-cache')
], ],
plugins: [ plugins: [
'~plugins/filters.js' '~plugins/filters.js'
], ],
build: { render: {
extractCSS: true, static: {
ssr: { maxAge: '1y',
// TODO: make component-cache module working in production without this extra setting setHeaders: function (res, path) {
cache: require('lru-cache')({ if (path.includes('sw.js') || path.includes('workbox-sw.')) {
max: 10000, res.setHeader('Cache-Control', 'public, max-age=0')
maxAge: 1000 * 60 * 15 }
}) }
},
extend(config, {isClient}) {
config.resolve.alias['create-api'] =
`./create-api-${isClient ? 'client' : 'server'}.js`
} }
}, }
} }
{ {
"name": "nuxt-hn", "name": "nuxt-hn",
"description": "Nuxt Hacker News", "description": "Nuxt Hacker News",
"version": "1.0.0",
"author": "Evan You <yyx990803@gmail.com>", "author": "Evan You <yyx990803@gmail.com>",
"contributors": [ "contributors": [
{ {
...@@ -23,13 +24,11 @@ ...@@ -23,13 +24,11 @@
"node": ">=7.0", "node": ">=7.0",
"npm": ">=4.0" "npm": ">=4.0"
}, },
"dependencies": { "dependencies": {
"@nuxtjs/component-cache": "latest", "@nuxtjs/component-cache": "^0.1.3",
"@nuxtjs/manifest": "latest", "@nuxtjs/pwa": "latest",
"@nuxtjs/meta": "latest",
"@nuxtjs/workbox": "latest",
"firebase": "^4.1.1", "firebase": "^4.1.1",
"nuxt": "^1.0.0-alpha2", "nuxt": "1.0.0-alpha.3",
"stylus": "^0.54.5", "stylus": "^0.54.5",
"stylus-loader": "^3.0.1" "stylus-loader": "^3.0.1"
} }
......
<script>
import createListView from '~components/createListView'
export default createListView('ask')
</script>
<template> <template>
<div class="item-view" v-if="item"> <div class="item-view view" v-if="item">
<template v-if="item"> <template v-if="item">
<div class="item-view-header"> <div class="item-view-header">
<a :href="item.url" target="_blank"> <a :href="item.url" target="_blank">
...@@ -10,7 +10,8 @@ ...@@ -10,7 +10,8 @@
</span> </span>
<p class="meta"> <p class="meta">
{{ item.score }} points {{ item.score }} points
| by <router-link :to="'/user/' + item.by">{{ item.by }}</router-link> | by
<router-link :to="'/user/' + item.by">{{ item.by }}</router-link>
{{ item.time | timeAgo }} ago {{ item.time | timeAgo }} ago
</p> </p>
</div> </div>
...@@ -33,14 +34,20 @@ ...@@ -33,14 +34,20 @@
export default { export default {
name: 'item-view', name: 'item-view',
components: { Spinner, Comment }, components: {Spinner, Comment},
data: () => ({ data: () => ({
loading: true loading: true
}), }),
head() {
return {
title: this.item.title
}
},
computed: { computed: {
item () { item() {
return this.$store.state.items[this.$route.params.id] return this.$store.state.items[this.$route.params.id]
} }
}, },
...@@ -48,16 +55,12 @@ ...@@ -48,16 +55,12 @@
// We only fetch the item itself before entering the view, because // We only fetch the item itself before entering the view, because
// it might take a long time to load threads with hundreds of comments // it might take a long time to load threads with hundreds of comments
// due to how the HN Firebase API works. // due to how the HN Firebase API works.
asyncData ({ store, route: { params: { id }}}) { asyncData({store, route: {params: {id}}}) {
return store.dispatch('FETCH_ITEMS', { ids: [id] }) return store.dispatch('FETCH_ITEMS', {ids: [id]})
},
title () {
return this.item.title
}, },
// Fetch comments when mounted on the client // Fetch comments when mounted on the client
beforeMount () { beforeMount() {
this.fetchComments() this.fetchComments()
}, },
...@@ -67,7 +70,7 @@ ...@@ -67,7 +70,7 @@
}, },
methods: { methods: {
fetchComments () { fetchComments() {
this.loading = true this.loading = true
fetchComments(this.$store, this.item).then(() => { fetchComments(this.$store, this.item).then(() => {
this.loading = false this.loading = false
...@@ -77,7 +80,7 @@ ...@@ -77,7 +80,7 @@
} }
// recursively fetch all descendent comments // recursively fetch all descendent comments
function fetchComments (store, item) { function fetchComments(store, item) {
if (item && item.kids) { if (item && item.kids) {
return store.dispatch('FETCH_ITEMS', { return store.dispatch('FETCH_ITEMS', {
ids: item.kids ids: item.kids
...@@ -85,6 +88,7 @@ ...@@ -85,6 +88,7 @@
return fetchComments(store, store.state.items[id]) return fetchComments(store, store.state.items[id])
}))) })))
} }
return Promise.resolve()
} }
</script> </script>
...@@ -92,7 +96,7 @@ ...@@ -92,7 +96,7 @@
.item-view-header .item-view-header
background-color #fff background-color #fff
padding 1.8em 2em 1em padding 1.8em 2em 1em
box-shadow 0 1px 2px rgba(0,0,0,.1) box-shadow 0 1px 2px rgba(0, 0, 0, .1)
h1 h1
display inline display inline
font-size 1.5em font-size 1.5em
......
<script>
import createListView from '~components/createListView'
export default createListView('job')
</script>
<script>
import createListView from '~components/createListView'
export default createListView('new')
</script>
<script>
import createListView from '~components/createListView'
export default createListView('show')
</script>
<script>
import createListView from '~components/createListView'
export default createListView('top')
</script>
<template> <template>
<div class="user-view"> <div class="user-view view">
<template v-if="user"> <template v-if="user">
<h1>User : {{ user.id }}</h1> <h1>User : {{ user.id }}</h1>
<ul class="meta"> <ul class="meta">
...@@ -20,43 +20,43 @@ ...@@ -20,43 +20,43 @@
<script> <script>
export default { export default {
name: 'user-view', name: 'user-view',
computed: { computed: {
user () { user() {
return this.$store.state.users[this.$route.params.id] return this.$store.state.users[this.$route.params.id]
} }
}, },
asyncData ({ store, route: { params: { id }}}) { head() {
return store.dispatch('FETCH_USER', { id }) return {
}, title: this.user.id || 'User not found'
}
},
title () { fetch({store, route: {params: {id}}}) {
return this.user return store.dispatch('FETCH_USER', {id})
? this.user.id },
: 'User not found'
} }
}
</script> </script>
<style lang="stylus"> <style lang="stylus">
.user-view .user-view
background-color #fff background-color #fff
box-sizing border-box box-sizing border-box
padding 2em 3em padding 2em 3em
h1 h1
margin 0 margin 0
font-size 1.5em font-size 1.5em
.meta .meta
list-style-type none list-style-type none
padding 0 padding 0
.label .label
display inline-block display inline-block
min-width 4em min-width 4em
.about .about
margin 1em 0 margin 1em 0
.links a .links a
text-decoration underline text-decoration underline
</style> </style>
import Vuex from 'vuex'
import actions from './actions' import actions from './actions'
import mutations from './mutations' import mutations from './mutations'
import getters from './getters' import getters from './getters'
export default { export default () => {
state() { return new Vuex.Store({
return { state: {
activeType: null, activeType: null,
itemsPerPage: 20, itemsPerPage: 20,
items: {/* [id: number]: Item */}, items: {/* [id: number]: Item */},
...@@ -16,9 +18,9 @@ export default { ...@@ -16,9 +18,9 @@ export default {
ask: [], ask: [],
job: [] job: []
} }
} },
}, actions,
actions, mutations,
mutations, getters
getters })
} }
...@@ -2,15 +2,21 @@ ...@@ -2,15 +2,21 @@
# yarn lockfile v1 # yarn lockfile v1
"@nuxtjs/component-cache@latest": "@nuxtjs/component-cache@^0.1.3":
version "0.1.3" version "0.1.3"
resolved "https://registry.yarnpkg.com/@nuxtjs/component-cache/-/component-cache-0.1.3.tgz#4cf2ef153e9d392facc98e7babefa87f79ea87ba" resolved "https://registry.yarnpkg.com/@nuxtjs/component-cache/-/component-cache-0.1.3.tgz#4cf2ef153e9d392facc98e7babefa87f79ea87ba"
dependencies: dependencies:
lru-cache "^4.0.2" lru-cache "^4.0.2"
"@nuxtjs/cssnano@latest":
version "0.1.0"
resolved "https://registry.yarnpkg.com/@nuxtjs/cssnano/-/cssnano-0.1.0.tgz#2837d466248a6b25d3531bb4058a68278536517a"
dependencies:
cssnano "^3.10.0"
"@nuxtjs/manifest@latest": "@nuxtjs/manifest@latest":
version "1.3.1" version "1.4.2"
resolved "https://registry.yarnpkg.com/@nuxtjs/manifest/-/manifest-1.3.1.tgz#0b073b111bd9521dd44845017d863719aa37a9ce" resolved "https://registry.yarnpkg.com/@nuxtjs/manifest/-/manifest-1.4.2.tgz#c92e9458891d03b9f8623dfa9fedaa9286406ef1"
dependencies: dependencies:
fs-extra "^3.0.1" fs-extra "^3.0.1"
hash-sum "^1.0.2" hash-sum "^1.0.2"
...@@ -20,9 +26,24 @@ ...@@ -20,9 +26,24 @@
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/@nuxtjs/meta/-/meta-1.1.0.tgz#7cfa7b666d23a21eba752c46ce13357ac898ffd1" resolved "https://registry.yarnpkg.com/@nuxtjs/meta/-/meta-1.1.0.tgz#7cfa7b666d23a21eba752c46ce13357ac898ffd1"
"@nuxtjs/optimize@latest":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@nuxtjs/optimize/-/optimize-1.1.0.tgz#167148172628cd4500a21795d405fc90149f550f"
dependencies:
"@nuxtjs/cssnano" latest
"@nuxtjs/pwa@latest":
version "0.1.0"
resolved "https://registry.yarnpkg.com/@nuxtjs/pwa/-/pwa-0.1.0.tgz#7a9324bb9ce6028124526071d151c58ea48a3b5d"
dependencies:
"@nuxtjs/manifest" latest
"@nuxtjs/meta" latest
"@nuxtjs/optimize" latest
"@nuxtjs/workbox" latest
"@nuxtjs/workbox@latest": "@nuxtjs/workbox@latest":
version "0.2.0" version "0.3.3"
resolved "https://registry.yarnpkg.com/@nuxtjs/workbox/-/workbox-0.2.0.tgz#b974041e1aee93964fa5c2c3e9e7183e799e233e" resolved "https://registry.yarnpkg.com/@nuxtjs/workbox/-/workbox-0.3.3.tgz#ae2d0a0e7b08cab55bf2fb23fc3205d2a10d43ff"
dependencies: dependencies:
workbox-webpack-plugin "^1.0.1" workbox-webpack-plugin "^1.0.1"
...@@ -102,8 +123,8 @@ anymatch@^1.3.0: ...@@ -102,8 +123,8 @@ anymatch@^1.3.0:
micromatch "^2.1.5" micromatch "^2.1.5"
aproba@^1.0.3: aproba@^1.0.3:
version "1.1.1" version "1.1.2"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1"
are-we-there-yet@~1.1.2: are-we-there-yet@~1.1.2:
version "1.1.4" version "1.1.4"
...@@ -191,7 +212,7 @@ autoprefixer@^6.3.1: ...@@ -191,7 +212,7 @@ autoprefixer@^6.3.1:
postcss "^5.2.16" postcss "^5.2.16"
postcss-value-parser "^3.2.3" postcss-value-parser "^3.2.3"
autoprefixer@^7.1.0: autoprefixer@^7.1.1:
version "7.1.1" version "7.1.1"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.1.tgz#97bc854c7d0b979f8d6489de547a0d17fb307f6d" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.1.tgz#97bc854c7d0b979f8d6489de547a0d17fb307f6d"
dependencies: dependencies:
...@@ -954,12 +975,12 @@ caniuse-api@^1.5.2: ...@@ -954,12 +975,12 @@ caniuse-api@^1.5.2:
lodash.uniq "^4.5.0" lodash.uniq "^4.5.0"
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
version "1.0.30000676" version "1.0.30000677"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000676.tgz#82ea578237637c8ff34a28acaade373b624c4ea8" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000677.tgz#13f421d40ae1434702103c494d2c4d716e2a8fcb"
caniuse-lite@^1.0.30000670: caniuse-lite@^1.0.30000670:
version "1.0.30000676" version "1.0.30000677"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000676.tgz#1e962123f48073f0c51c4ea0651dd64d25786498" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000677.tgz#43090233d4b2c7190657f95455983d94d264baaa"
caseless@~0.12.0: caseless@~0.12.0:
version "0.12.0" version "0.12.0"
...@@ -1260,7 +1281,7 @@ css-color-names@0.0.4: ...@@ -1260,7 +1281,7 @@ css-color-names@0.0.4:
version "0.0.4" version "0.0.4"
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
css-loader@^0.28.1: css-loader@^0.28.4:
version "0.28.4" version "0.28.4"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.4.tgz#6cf3579192ce355e8b38d5f42dd7a1f2ec898d0f" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.4.tgz#6cf3579192ce355e8b38d5f42dd7a1f2ec898d0f"
dependencies: dependencies:
...@@ -1308,7 +1329,7 @@ cssesc@^0.1.0: ...@@ -1308,7 +1329,7 @@ cssesc@^0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
"cssnano@>=2.6.1 <4": "cssnano@>=2.6.1 <4", cssnano@^3.10.0:
version "3.10.0" version "3.10.0"
resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
dependencies: dependencies:
...@@ -1366,7 +1387,7 @@ de-indent@^1.0.2: ...@@ -1366,7 +1387,7 @@ de-indent@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
debug@*, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3, debug@^2.6.6: debug@*, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3, debug@^2.6.8:
version "2.6.8" version "2.6.8"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
dependencies: dependencies:
...@@ -1907,7 +1928,7 @@ glob@7.0.x: ...@@ -1907,7 +1928,7 @@ glob@7.0.x:
once "^1.3.0" once "^1.3.0"
path-is-absolute "^1.0.0" path-is-absolute "^1.0.0"
glob@^7.0.5, glob@^7.1.1: glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
version "7.1.2" version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies: dependencies:
...@@ -2027,7 +2048,7 @@ html-entities@^1.2.0: ...@@ -2027,7 +2048,7 @@ html-entities@^1.2.0:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
html-minifier@^3.2.3, html-minifier@^3.5.0: html-minifier@^3.2.3, html-minifier@^3.5.2:
version "3.5.2" version "3.5.2"
resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.2.tgz#d73bc3ff448942408818ce609bf3fb0ea7ef4eb7" resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.2.tgz#d73bc3ff448942408818ce609bf3fb0ea7ef4eb7"
dependencies: dependencies:
...@@ -2796,12 +2817,12 @@ number-is-nan@^1.0.0: ...@@ -2796,12 +2817,12 @@ number-is-nan@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
nuxt@^1.0.0-alpha2: nuxt@1.0.0-alpha.3:
version "1.0.0-alpha2" version "1.0.0-alpha.3"
resolved "https://registry.yarnpkg.com/nuxt/-/nuxt-1.0.0-alpha2.tgz#03366dd8384406b26b1eeff06f7f2b12a6f40c00" resolved "https://registry.yarnpkg.com/nuxt/-/nuxt-1.0.0-alpha.3.tgz#cc5c3e8c98c9c85267219628279e8d63c2c82657"
dependencies: dependencies:
ansi-html "^0.0.7" ansi-html "^0.0.7"
autoprefixer "^7.1.0" autoprefixer "^7.1.1"
babel-core "^6.24.1" babel-core "^6.24.1"
babel-loader "^7.0.0" babel-loader "^7.0.0"
babel-preset-es2015 "^6.24.1" babel-preset-es2015 "^6.24.1"
...@@ -2809,40 +2830,40 @@ nuxt@^1.0.0-alpha2: ...@@ -2809,40 +2830,40 @@ nuxt@^1.0.0-alpha2:
chokidar "^1.7.0" chokidar "^1.7.0"
compression "^1.6.2" compression "^1.6.2"
connect "^3.6.2" connect "^3.6.2"
css-loader "^0.28.1" css-loader "^0.28.4"
debug "^2.6.6" debug "^2.6.8"
etag "^1.8.0" etag "^1.8.0"
extract-text-webpack-plugin "^2.1.0" extract-text-webpack-plugin "^2.1.0"
file-loader "^0.11.1" file-loader "^0.11.1"
fresh "^0.5.0" fresh "^0.5.0"
friendly-errors-webpack-plugin "^1.6.1" friendly-errors-webpack-plugin "^1.6.1"
fs-extra "^3.0.1" fs-extra "^3.0.1"
glob "^7.1.1" glob "^7.1.2"
hash-sum "^1.0.2" hash-sum "^1.0.2"
html-minifier "^3.5.0" html-minifier "^3.5.2"
html-webpack-plugin "^2.28.0" html-webpack-plugin "^2.28.0"
lodash "^4.17.4" lodash "^4.17.4"
memory-fs "^0.4.1" memory-fs "^0.4.1"
offline-plugin "^4.7.0" offline-plugin "^4.8.1"
opencollective "^1.0.3" opencollective "^1.0.3"
pify "^2.3.0" pify "^3.0.0"
post-compile-webpack-plugin "^0.1.1" post-compile-webpack-plugin "^0.1.1"
preload-webpack-plugin "^1.2.2" preload-webpack-plugin "^1.2.2"
progress-bar-webpack-plugin "^1.9.3" progress-bar-webpack-plugin "^1.9.3"
script-ext-html-webpack-plugin "^1.8.0" script-ext-html-webpack-plugin "^1.8.1"
serialize-javascript "^1.3.0" serialize-javascript "^1.3.0"
serve-static "^1.12.2" serve-static "^1.12.3"
url-loader "^0.5.8" url-loader "^0.5.8"
vue "~2.3.3" vue "~2.3.3"
vue-loader "^12.1.0" vue-loader "^12.2.1"
vue-meta "^1.0.4" vue-meta "^1.0.4"
vue-router "^2.5.3" vue-router "^2.5.3"
vue-server-renderer "~2.3.3" vue-server-renderer "~2.3.3"
vue-ssr-html-stream "^2.2.0" vue-ssr-html-stream "^2.2.0"
vue-template-compiler "~2.3.3" vue-template-compiler "~2.3.3"
vuex "^2.3.1" vuex "^2.3.1"
webpack "^2.5.1" webpack "^2.6.1"
webpack-bundle-analyzer "^2.8.1" webpack-bundle-analyzer "^2.8.2"
webpack-dev-middleware "^1.10.2" webpack-dev-middleware "^1.10.2"
webpack-hot-middleware "^2.18.0" webpack-hot-middleware "^2.18.0"
webpack-node-externals "^1.6.0" webpack-node-externals "^1.6.0"
...@@ -2874,7 +2895,7 @@ object.omit@^2.0.0: ...@@ -2874,7 +2895,7 @@ object.omit@^2.0.0:
for-own "^0.1.4" for-own "^0.1.4"
is-extendable "^0.1.1" is-extendable "^0.1.1"
offline-plugin@^4.7.0: offline-plugin@^4.8.1:
version "4.8.1" version "4.8.1"
resolved "https://registry.yarnpkg.com/offline-plugin/-/offline-plugin-4.8.1.tgz#1d73457081185777179c29d9d416f71077a0197a" resolved "https://registry.yarnpkg.com/offline-plugin/-/offline-plugin-4.8.1.tgz#1d73457081185777179c29d9d416f71077a0197a"
dependencies: dependencies:
...@@ -3036,10 +3057,14 @@ performance-now@^0.2.0: ...@@ -3036,10 +3057,14 @@ performance-now@^0.2.0:
version "0.2.0" version "0.2.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
pify@^2.0.0, pify@^2.3.0: pify@^2.0.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
pify@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
pinkie-promise@^2.0.0: pinkie-promise@^2.0.0:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
...@@ -3701,7 +3726,7 @@ sax@~1.2.1: ...@@ -3701,7 +3726,7 @@ sax@~1.2.1:
version "1.2.2" version "1.2.2"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828"
script-ext-html-webpack-plugin@^1.8.0: script-ext-html-webpack-plugin@^1.8.1:
version "1.8.1" version "1.8.1"
resolved "https://registry.yarnpkg.com/script-ext-html-webpack-plugin/-/script-ext-html-webpack-plugin-1.8.1.tgz#36bba726c38bcdebc1e69333e3fd7d718a9b3195" resolved "https://registry.yarnpkg.com/script-ext-html-webpack-plugin/-/script-ext-html-webpack-plugin-1.8.1.tgz#36bba726c38bcdebc1e69333e3fd7d718a9b3195"
dependencies: dependencies:
...@@ -3733,7 +3758,7 @@ serialize-javascript@^1.3.0: ...@@ -3733,7 +3758,7 @@ serialize-javascript@^1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.3.0.tgz#86a4f3752f5c7e47295449b0bbb63d64ba533f05" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.3.0.tgz#86a4f3752f5c7e47295449b0bbb63d64ba533f05"
serve-static@1.12.3, serve-static@^1.12.2: serve-static@1.12.3, serve-static@^1.12.3:
version "1.12.3" version "1.12.3"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.3.tgz#9f4ba19e2f3030c547f8af99107838ec38d5b1e2" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.3.tgz#9f4ba19e2f3030c547f8af99107838ec38d5b1e2"
dependencies: dependencies:
...@@ -4064,8 +4089,8 @@ uglify-js@3.0.x: ...@@ -4064,8 +4089,8 @@ uglify-js@3.0.x:
source-map "~0.5.1" source-map "~0.5.1"
uglify-js@^2.8.27: uglify-js@^2.8.27:
version "2.8.27" version "2.8.28"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.27.tgz#47787f912b0f242e5b984343be8e35e95f694c9c" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.28.tgz#e335032df9bb20dcb918f164589d5af47f38834a"
dependencies: dependencies:
source-map "~0.5.1" source-map "~0.5.1"
yargs "~3.10.0" yargs "~3.10.0"
...@@ -4181,7 +4206,7 @@ vue-hot-reload-api@^2.1.0: ...@@ -4181,7 +4206,7 @@ vue-hot-reload-api@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.1.0.tgz#9ca58a6e0df9078554ce1708688b6578754d86de" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.1.0.tgz#9ca58a6e0df9078554ce1708688b6578754d86de"
vue-loader@^12.1.0: vue-loader@^12.2.1:
version "12.2.1" version "12.2.1"
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-12.2.1.tgz#53f27c0973d386768f5a75156f4129b5efc6ba55" resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-12.2.1.tgz#53f27c0973d386768f5a75156f4129b5efc6ba55"
dependencies: dependencies:
...@@ -4264,7 +4289,7 @@ watchpack@^1.3.1: ...@@ -4264,7 +4289,7 @@ watchpack@^1.3.1:
chokidar "^1.4.3" chokidar "^1.4.3"
graceful-fs "^4.1.2" graceful-fs "^4.1.2"
webpack-bundle-analyzer@^2.8.1: webpack-bundle-analyzer@^2.8.2:
version "2.8.2" version "2.8.2"
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.8.2.tgz#8b6240c29a9d63bc72f09d920fb050adbcce9fe8" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.8.2.tgz#8b6240c29a9d63bc72f09d920fb050adbcce9fe8"
dependencies: dependencies:
...@@ -4316,7 +4341,7 @@ webpack-sources@^0.2.3: ...@@ -4316,7 +4341,7 @@ webpack-sources@^0.2.3:
source-list-map "^1.1.1" source-list-map "^1.1.1"
source-map "~0.5.3" source-map "~0.5.3"
webpack@^2.5.1: webpack@^2.6.1:
version "2.6.1" version "2.6.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.1.tgz#2e0457f0abb1ac5df3ab106c69c672f236785f07" resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.1.tgz#2e0457f0abb1ac5df3ab106c69c672f236785f07"
dependencies: dependencies:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment