Giter Club home page Giter Club logo

vue-hackernews-2.0's Introduction

vue-hackernews-2.0

HackerNews clone built with Vue 2.0 + vue-router + vuex, with server-side rendering.


Live Demo

Features

Note: in practice, it is unnecessary to code-split for an app of this size (where each async chunk is only a few kilobytes), nor is it optimal to extract an extra CSS file (which is only 1kb) -- they are used simply because this is a demo app showcasing all the supported features.

  • Server Side Rendering
    • Vue + vue-router + vuex working together
    • Server-side data pre-fetching
    • Client-side state & DOM hydration
    • Automatically inlines CSS used by rendered components only
    • Preload / prefetch resource hints
    • Route-level code splitting
  • Progressive Web App
    • App manifest
    • Service worker
    • 100/100 Lighthouse score
  • Single-file Vue Components
    • Hot-reload in development
    • CSS extraction for production
  • Animation
    • Effects when switching route views
    • Real-time list updates with FLIP Animation

A Note on Performance

This is a demo primarily aimed at explaining how to build a server-side rendered Vue app, as a companion to our SSR documentation. There are a few things we probably won't do in production if we were optimizing for performance, for example:

  • This demo uses the Firebase-based HN API to showcase real-time updates, but the Firebase API also comes with a larger bundle, more JavaScript to parse on the client, and doesn't offer an efficient way to batch-fetch pages of items, so it impacts performance quite a bit on a cold start or cache miss.

  • In practice, it is unnecessary to code-split for an app of this size (where each async chunk is only a few kilobytes so the extra request isn't really worth it), nor is it optimal to extract an extra CSS file (which is only 1kb).

It is therefore not recommended to use this app as a reference for Vue SSR performance - instead, do your own benchmarking, and make sure to measure and optimize based on your actual app constraints.

Architecture Overview

screen shot 2016-08-11 at 6 06 57 pm

A detailed Vue SSR guide can be found here.

Build Setup

Requires Node.js 7+

# install dependencies
npm install # or yarn

# serve in dev mode, with hot reload at localhost:8080
npm run dev

# build for production
npm run build

# serve in production mode
npm start

License

MIT

vue-hackernews-2.0's People

Contributors

addyosmani avatar alextes avatar bodyno avatar bradoyler avatar chriszamierowski avatar eliurkis avatar hyra avatar iiegor avatar inouetakuya avatar isairz avatar jounqin avatar juukie avatar limonte avatar markuplab avatar mhadaily avatar miguepiscy avatar mikekidder avatar netpi avatar nolanlawson avatar panjiachen avatar piusnyakoojo avatar rezahaidari avatar riophae avatar roryokane avatar rumkin avatar sirlancelot avatar stevenyuysy avatar tangwz avatar williamboman avatar yyx990803 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vue-hackernews-2.0's Issues

How to structure this project to enable lazy-loading routes...

...but still have them be server-render compatible?

I've tried to code this in for around 2 weeks - hopefully someone knows a solution, because my brain is starting to hurt 😄

I have ready a smaller example repo demonstrating my issue.

For more context, refer to this StackOverflow question.

I'd really like to see a method of accomplishing this documented in vue-router - which I'm more than happy to do, as long as I'm pointed in the right direction 😄

Style scoped after refresh page not work in NODE_ENV=production

If write scoped style in any component, for example UserView.vue add scoped -

<style lang="stylus" scoped>

After they:

npm run build && npm start

Open project to home page and go to user page (route in client-side) you can see normal style and normal attr data-v-#, but if you refresh user page you can see style not working and data-v-# changed.

webpack-dev-middleware instead of webpack-dev-server

Is there a particular reason why you're using your own express server based on webpack-dev-middleware instead of just using webpack-dev-server? I've tried both, and it seems like there is no difference (both support hot reload and all the features I know of), but in your case it's much more complicated and obscure, especially when you need to change something in your build process.

So if it's all the same, I suggest to replace that server with a simple webpack-dev-server --inline --hot command in the package.json. For people who try to use hot real for the first time it would be much clearer and simpler.

A error happened when installing stylus

at CachedPathEvaluator.visitImport (/Users/zhangran/Documents/git-test/vue-hackernews-2.0/node_modules/stylus-loader/lib/evaluator.js:157:21)
at CachedPathEvaluator.Visitor.visit (/Users/zhangran/Documents/git-test/vue-hackernews-2.0/node_modules/stylus/lib/visitor/index.js:28:40)
at CachedPathEvaluator.Evaluator.visit (/Users/zhangran/Documents/git-test/vue-hackernews-2.0/node_modules/stylus/lib/visitor/evaluator.js:160:18)
at CachedPathEvaluator.Evaluator.visitRoot (/Users/zhangran/Documents/git-test/vue-hackernews-2.0/node_modules/stylus/lib/visitor/evaluator.js:707:27)
at CachedPathEvaluator.Visitor.visit (/Users/zhangran/Documents/git-test/vue-hackernews-2.0/node_modules/stylus/lib/visitor/index.js:28:40)
at CachedPathEvaluator.Evaluator.visit (/Users/zhangran/Documents/git-test/vue-hackernews-2.0/node_modules/stylus/lib/visitor/evaluator.js:160:18)
at CachedPathEvaluator.Evaluator.evaluate (/Users/zhangran/Documents/git-test/vue-hackernews-2.0/node_modules/stylus/lib/visitor/evaluator.js:247:15)
at Renderer.render (/Users/zhangran/Documents/git-test/vue-hackernews-2.0/node_modules/stylus/lib/renderer.js:86:26)
at /Users/zhangran/Documents/git-test/vue-hackernews-2.0/node_modules/stylus-loader/index.js:158:12
at tryCatchReject (/Users/zhangran/Documents/git-test/vue-hackernews-2.0/node_modules/when/lib/makePromise.js:840:30)

Koa2 support - next is not a function?

Hi guys,

I'm trying to tweak this example to work with Koa2

https://github.com/kristianmandrup/vue-hackernews-2.0

However I get a strange error:

According to the call stack, koa-compose ends up calling webpack-dev-middleware which expects a next argument.

Maybe related to this issue ??
or this?

  TypeError: next is not a function
      at goNext (/Users/kristianmandrup/repos/aurelia-projs/ai/vue-hackernews-2.0/node_modules/webpack-dev-middleware/middleware.js:194:41)
      at webpackDevMiddleware (/Users/kristianmandrup/repos/aurelia-projs/ai/vue-hackernews-2.0/node_modules/webpack-dev-middleware/middleware.js:206:33)
      at dispatch (/Users/kristianmandrup/repos/aurelia-projs/ai/vue-hackernews-2.0/node_modules/koa-compose/index.js:43:32)
      at /Users/kristianmandrup/repos/aurelia-projs/ai/vue-hackernews-2.0/node_modules/koa-compose/index.js:36:12
      at Server.<anonymous> (/Users/kristianmandrup/repos/aurelia-projs/ai/vue-hackernews-2.0/node_modules/koa/lib/application.js:136:7)
      at emitTwo (events.js:106:13)
      at Server.emit (events.js:191:7)
      at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:546:12)
      at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23)

npm run dev 编译成功 但是访问链接后奔溃

vue-router 服务端渲染的时候报错

node server

server started at localhost:8080
webpack built 305ac7407cc71ca06b31 in 6405ms
Hash: 305ac7407cc71ca06b31
Version: webpack 2.1.0-beta.25
Time: 6405ms
Asset Size Chunks Chunk Names
client-bundle.js 160 kB 0 [emitted] app
client-vendor-bundle.js 442 kB 1 [emitted] vendor
client-bundle.js.map 207 kB 0 [emitted] app
client-vendor-bundle.js.map 549 kB 1 [emitted] vendor
webpack: bundle is now VALID.
/Users/yangjiajun/vue-hackernews-2.0/server.js:85
throw err
^

TypeError: this$1.ensureURL is not a function
at /Users/yangjiajun/vue-hackernews-2.0/node_modules/vue-router/dist/vue-router.js:1227:12
at /Users/yangjiajun/vue-hackernews-2.0/node_modules/vue-router/dist/vue-router.js:1279:9
at step (/Users/yangjiajun/vue-hackernews-2.0/node_modules/vue-router/dist/vue-router.js:1191:7)
at step (/Users/yangjiajun/vue-hackernews-2.0/node_modules/vue-router/dist/vue-router.js:1198:9)
at runQueue (/Users/yangjiajun/vue-hackernews-2.0/node_modules/vue-router/dist/vue-router.js:1202:3)
at /Users/yangjiajun/vue-hackernews-2.0/node_modules/vue-router/dist/vue-router.js:1276:5
at step (/Users/yangjiajun/vue-hackernews-2.0/node_modules/vue-router/dist/vue-router.js:1191:7)
at step (/Users/yangjiajun/vue-hackernews-2.0/node_modules/vue-router/dist/vue-router.js:1198:9)
at step (/Users/yangjiajun/vue-hackernews-2.0/node_modules/vue-router/dist/vue-router.js:1198:9)
at runQueue (/Users/yangjiajun/vue-hackernews-2.0/node_modules/vue-router/dist/vue-router.js:1202:3)

document is not defined

Hi guys!

I'm trying to add TweeMax.js from GSAP on a project with the same SSR and webpack configuration as this one ( I did copy everything for testing purposes ). When I run npm run dev it generates de client and vendor bundles perfectly, but when I access any route it throws the following exception:

/Users/vitor/Sites/ssr-test/front-end/server.js:105
        throw err
        ^

ReferenceError: document is not defined
    at Function.<anonymous> (/Users/vitor/Sites/ssr-test/front-end/node_modules/gsap/src/uncompressed/TweenMax.js:2571:11)
    at check (/Users/vitor/Sites/ssr-test/front-end/node_modules/gsap/src/uncompressed/TweenMax.js:5986:61)
    at new Definition (/Users/vitor/Sites/ssr-test/front-end/node_modules/gsap/src/uncompressed/TweenMax.js:6010:10)
    at window._gsDefine (/Users/vitor/Sites/ssr-test/front-end/node_modules/gsap/src/uncompressed/TweenMax.js:6015:12)
    at Array.<anonymous> (/Users/vitor/Sites/ssr-test/front-end/node_modules/gsap/src/uncompressed/TweenMax.js:2524:11)
    at /Users/vitor/Sites/ssr-test/front-end/node_modules/gsap/src/uncompressed/TweenMax.js:7791:9
    at Object.<anonymous> (/Users/vitor/Sites/ssr-test/front-end/node_modules/gsap/src/uncompressed/TweenMax.js:7802:3)
    at Module._compile (module.js:556:32)
    at Object.Module._extensions..js (module.js:565:10)
    at Module.load (module.js:473:32)

I did some research, and I think it's because we don't have document or window global objects on the server side environment. I tried to fix it declaring both as global variables on the server-entry.js file, but it was unsuccessful

if (typeof(window) == 'undefined'){
    let dummyElement = { style: {}, getElementsByTagName: function() { return [] } }
    global.window = {}
    global.navigator = { userAgent: "" }
    global.document = { createElement: function() { return dummyElement } }
}

Maybe anyone can help me with that? I'm probably missing something.

Thanks!

一运行npm run dev就报错,信息如下

0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'run', 'dev' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'predev', 'dev', 'postdev' ]
5 info lifecycle vue-hackernews-2.0@~predev: vue-hackernews-2.0@
6 silly lifecycle vue-hackernews-2.0@~predev: no script for predev, continuing
7 info lifecycle vue-hackernews-2.0@~dev: vue-hackernews-2.0@
8 verbose lifecycle vue-hackernews-2.0@~dev: unsafe-perm in lifecycle true
9 verbose lifecycle vue-hackernews-2.0@~dev: PATH: /usr/local/lib/node_modules/npm/bin/node-gyp-bin:/Users/Ivyjohnson/Downloads/vue-hackernews-2.0-master/node_modules/.bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin
10 verbose lifecycle vue-hackernews-2.0@~dev: CWD: /Users/Ivyjohnson/Downloads/vue-hackernews-2.0-master
11 silly lifecycle vue-hackernews-2.0@~dev: Args: [ '-c', 'node server' ]
12 silly lifecycle vue-hackernews-2.0@~dev: Returned: code: 1 signal: null
13 info lifecycle vue-hackernews-2.0@~dev: Failed to exec dev script
14 verbose stack Error: vue-hackernews-2.0@ dev: node server
14 verbose stack Exit status 1
14 verbose stack at EventEmitter. (/usr/local/lib/node_modules/npm/lib/utils/lifecycle.js:245:16)
14 verbose stack at emitTwo (events.js:106:13)
14 verbose stack at EventEmitter.emit (events.js:191:7)
14 verbose stack at ChildProcess. (/usr/local/lib/node_modules/npm/lib/utils/spawn.js:24:14)
14 verbose stack at emitTwo (events.js:106:13)
14 verbose stack at ChildProcess.emit (events.js:191:7)
14 verbose stack at maybeClose (internal/child_process.js:852:16)
14 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:215:5)
15 verbose pkgid vue-hackernews-2.0@
16 verbose cwd /Users/Ivyjohnson/Downloads/vue-hackernews-2.0-master
17 error Darwin 15.6.0
18 error argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "dev"
19 error node v6.2.2
20 error npm v3.9.5
21 error code ELIFECYCLE
22 error vue-hackernews-2.0@ dev: node server
22 error Exit status 1
23 error Failed at the vue-hackernews-2.0@ dev script 'node server'.
23 error Make sure you have the latest version of node.js and npm installed.
23 error If you do, this is most likely a problem with the vue-hackernews-2.0 package,
23 error not with npm itself.
23 error Tell the author that this fails on your system:
23 error node server
23 error You can get information on how to open an issue for this project with:
23 error npm bugs vue-hackernews-2.0
23 error Or if that isn't available, you can get their info via:
23 error npm owner ls vue-hackernews-2.0
23 error There is likely additional logging output above.
24 verbose exit [ 1, true ]

使用第三方UI库出错

在client-entry.js中导入后在view中使用UI库中的元件,不报错,但也没效果:
import Mint from 'mint-ui';
import 'mint-ui/lib/style.css';
Vue.use(Mint);

如果直接在view中导入UI库或UI库中的具体元件,则会报错:
document或window未创建

npm run dev出错

SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:373:25)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18)
at node.js:974:3

npm ERR! Darwin 15.6.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "dev"
npm ERR! node v4.6.0
npm ERR! npm v2.15.9
npm ERR! code ELIFECYCLE
npm ERR! vue-hackernews-2.0@ dev: node server
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the vue-hackernews-2.0@ dev script 'node server'.
npm ERR! This is most likely a problem with the vue-hackernews-2.0 package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node server
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs vue-hackernews-2.0
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!
npm ERR! npm owner ls vue-hackernews-2.0
npm ERR! There is likely additional logging output above.

你好,项目运行异常

你好,前辈~
我将这个仓库给clone下来了。按照步骤 npm install->npm run dev
提示报错了:
image

我的node环境是6.6的
webpack也全局安装了。

谢谢!

跑不起来,老是报错.少了这个文件也没看到呀???

vue-hackernews-2.0@ dev /work/code/TestProject/vue-hackernews-2.0
node server

fs.js:640
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^

Error: ENOENT: no such file or directory, open '/work/code/TestProject/vue-hackernews-2.0/dist/server-bundle.js'
at Error (native)
at Object.fs.openSync (fs.js:640:18)
at Object.fs.readFileSync (fs.js:508:33)
at Object. (/work/code/TestProject/vue-hackernews-2.0/server.js:33:32)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)

npm ERR! Linux 4.2.0-42-generic
npm ERR! argv "/usr/local/node/bin/node" "/usr/local/bin/npm" "run" "dev"
npm ERR! node v6.8.0
npm ERR! npm v3.10.8
npm ERR! code ELIFECYCLE
npm ERR! vue-hackernews-2.0@ dev: node server
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the vue-hackernews-2.0@ dev script 'node server'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the vue-hackernews-2.0 package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node server
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs vue-hackernews-2.0
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls vue-hackernews-2.0
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! /work/code/TestProject/vue-hackernews-2.0/npm-debug.log

How to add new css from node module

Hi,

I was trying to enhance this, I wanted to use flexboxgrid with this. I added it in package.json and installed it. I was trying to include this in index.html like this:

<link rel="stylesheet" href="/./node_modules/flexboxgrid/dist/flexboxgrid.min.css" type="text/css" >

But I am getting following error in the browser:

Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost:8080/node_modules/flexboxgrid/dist/flexboxgrid.min.css".

I am not sure what I should be right way to do this this, what am I doing wring, Please help.

error when npm run dev

0 info it worked if it ends with ok
1 verbose cli [ 'D:\\Program Files\\nodejs\\node.exe',
1 verbose cli   'D:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli   'run',
1 verbose cli   'dev' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'predev', 'dev', 'postdev' ]
5 info predev vue-hackernews-2.0@
6 info dev vue-hackernews-2.0@
7 verbose unsafe-perm in lifecycle true
8 info vue-hackernews-2.0@ Failed to exec dev script
9 verbose stack Error: vue-hackernews-2.0@ dev: `node server`
9 verbose stack Exit status 1
9 verbose stack     at EventEmitter.<anonymous> (D:\Program Files\nodejs\node_modules\npm\lib\utils\lifecycle.js:217:16)
9 verbose stack     at emitTwo (events.js:87:13)
9 verbose stack     at EventEmitter.emit (events.js:172:7)
9 verbose stack     at ChildProcess.<anonymous> (D:\Program Files\nodejs\node_modules\npm\lib\utils\spawn.js:24:14)
9 verbose stack     at emitTwo (events.js:87:13)
9 verbose stack     at ChildProcess.emit (events.js:172:7)
9 verbose stack     at maybeClose (internal/child_process.js:827:16)
9 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
10 verbose pkgid vue-hackernews-2.0@
11 verbose cwd d:\pro\VUE\vue-hackernews-2.0
12 error Windows_NT 10.0.14393
13 error argv "D:\\Program Files\\nodejs\\node.exe" "D:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "dev"
14 error node v4.4.7
15 error npm  v2.15.8
16 error code ELIFECYCLE
17 error vue-hackernews-2.0@ dev: `node server`
17 error Exit status 1
18 error Failed at the vue-hackernews-2.0@ dev script 'node server'.
18 error This is most likely a problem with the vue-hackernews-2.0 package,
18 error not with npm itself.
18 error Tell the author that this fails on your system:
18 error     node server
18 error You can get information on how to open an issue for this project with:
18 error     npm bugs vue-hackernews-2.0
18 error Or if that isn't available, you can get their info via:
18 error
18 error     npm owner ls vue-hackernews-2.0
18 error There is likely additional logging output above.
19 verbose exit [ 1, true ]

vue-hn.now.sh - 502 An error occured with your deployment.

Logs:

10/02/16 1:57:20 PM
whole request: 14ms
10/02/16 1:57:20 PM
whole request: 15ms
10/02/16 1:57:21 PM
whole request: 12ms
10/02/16 1:57:55 PM
whole request: 69ms
10/02/16 1:59:02 PM
whole request: 18ms
10/02/16 2:01:08 PM
whole request: 17ms
10/02/16 2:01:23 PM
whole request: 16ms
10/02/16 2:01:27 PM
whole request: 18ms
10/02/16 2:01:28 PM
whole request: 19ms
10/02/16 2:02:49 PM
whole request: 54ms
10/02/16 2:03:52 PM
whole request: 87ms
10/02/16 2:06:17 PM
whole request: 11ms
10/02/16 2:06:21 PM
whole request: 21ms
10/02/16 2:06:37 PM
whole request: 18ms
10/02/16 2:07:09 PM
whole request: 98ms
10/02/16 2:07:33 PM
whole request: 16ms
10/02/16 2:08:13 PM
whole request: 76ms
10/02/16 2:09:17 PM
whole request: 14ms
10/02/16 2:10:22 PM
whole request: 74ms
10/02/16 2:11:21 PM
whole request: 54ms
10/02/16 2:11:32 PM
whole request: 16ms
10/02/16 2:11:36 PM
whole request: 11ms
10/02/16 2:12:09 PM
whole request: 55ms
10/02/16 2:12:14 PM
whole request: 11ms
10/02/16 2:12:34 PM
whole request: 54ms
10/02/16 2:13:46 PM
whole request: 13ms
10/02/16 2:13:54 PM
whole request: 164ms
10/02/16 2:15:52 PM
whole request: 30ms
10/02/16 2:17:37 PM
whole request: 68ms
10/02/16 2:19:51 PM
whole request: 95ms
10/02/16 2:21:17 PM
whole request: 27ms
10/02/16 2:21:33 PM
whole request: 18ms
10/02/16 2:21:49 PM
whole request: 18ms
10/02/16 2:22:13 PM
whole request: 87ms
10/02/16 2:22:18 PM
whole request: 94ms
10/02/16 2:22:20 PM
whole request: 13ms
10/02/16 2:22:22 PM
whole request: 16ms
10/02/16 2:22:26 PM
whole request: 17ms
10/02/16 2:22:48 PM
whole request: 22ms
10/02/16 2:22:51 PM
whole request: 14ms
10/02/16 2:22:55 PM
whole request: 11ms
10/02/16 2:23:07 PM
whole request: 9ms
10/02/16 2:23:21 PM
whole request: 19ms
10/02/16 2:23:46 PM
whole request: 13ms
10/02/16 2:23:55 PM
whole request: 13ms
10/02/16 2:24:00 PM
whole request: 17ms
10/02/16 2:24:07 PM
whole request: 14ms
10/02/16 2:24:33 PM
whole request: 13ms
10/02/16 2:25:06 PM
whole request: 14ms
10/02/16 2:27:44 PM
whole request: 57ms
10/02/16 2:27:56 PM
whole request: 13ms
10/02/16 2:27:59 PM
whole request: 22ms
10/02/16 2:28:14 PM
whole request: 52ms
10/02/16 2:30:50 PM
whole request: 53ms
10/02/16 2:31:03 PM
whole request: 87ms
10/02/16 2:31:46 PM
whole request: 12ms
10/02/16 2:32:50 PM
whole request: 11ms
10/02/16 2:33:17 PM
whole request: 53ms
10/02/16 2:34:48 PM
whole request: 51ms
10/02/16 2:36:19 PM
whole request: 78ms
10/02/16 2:36:33 PM
whole request: 13ms
10/02/16 2:37:06 PM
whole request: 18ms
10/02/16 2:37:18 PM
whole request: 19ms
10/02/16 2:37:18 PM
whole request: 12ms
10/02/16 2:38:47 PM
whole request: 14ms
10/02/16 2:38:52 PM
whole request: 62ms
10/02/16 2:38:57 PM
whole request: 110ms
10/02/16 2:39:02 PM
whole request: 85ms
10/02/16 2:39:14 PM
whole request: 18ms
10/02/16 2:44:11 PM
whole request: 70ms
10/02/16 2:44:23 PM
whole request: 17ms
10/02/16 2:44:39 PM
whole request: 13ms
10/02/16 2:44:55 PM
whole request: 15ms
10/02/16 2:45:32 PM
whole request: 24ms
10/02/16 2:47:04 PM
whole request: 59ms
10/02/16 2:47:55 PM
whole request: 13ms
10/02/16 2:50:16 PM
whole request: 49ms
10/02/16 2:51:53 PM
whole request: 89ms
10/02/16 2:51:55 PM
whole request: 12ms
10/02/16 2:51:58 PM
whole request: 18ms
10/02/16 2:52:09 PM
whole request: 16ms
10/02/16 2:52:11 PM
whole request: 81ms
10/02/16 2:52:26 PM
whole request: 91ms
10/02/16 2:53:05 PM
whole request: 12ms
10/02/16 2:55:08 PM
whole request: 19ms
10/02/16 2:55:34 PM
whole request: 11ms
10/02/16 2:55:49 PM
whole request: 11ms
10/02/16 2:56:05 PM
whole request: 12ms
10/02/16 2:56:53 PM
whole request: 49ms
10/02/16 2:56:58 PM
whole request: 52ms
10/02/16 2:57:07 PM
whole request: 18ms
10/02/16 2:57:13 PM
whole request: 22ms
10/02/16 2:57:17 PM
whole request: 14ms
10/02/16 2:57:23 PM
whole request: 53ms
10/02/16 2:57:58 PM
whole request: 113ms
10/02/16 2:58:13 PM
whole request: 21ms
10/02/16 2:58:52 PM
whole request: 13ms
10/02/16 2:59:05 PM
whole request: 20ms
10/02/16 2:59:12 PM
whole request: 69ms
10/02/16 2:59:21 PM
whole request: 13ms
10/02/16 2:59:23 PM
whole request: 19ms
10/02/16 2:59:50 PM
whole request: 12ms
10/02/16 3:00:44 PM
whole request: 56ms
10/02/16 3:00:46 PM
whole request: 16ms
10/02/16 3:05:01 PM
whole request: 13ms
10/02/16 3:05:38 PM
whole request: 56ms
10/02/16 3:06:17 PM
whole request: 14ms
10/02/16 3:06:45 PM
whole request: 15ms
10/02/16 3:07:22 PM
whole request: 75ms
10/02/16 3:07:36 PM
whole request: 12ms
10/02/16 3:09:51 PM
whole request: 60ms
10/02/16 3:09:59 PM
whole request: 22ms
10/02/16 3:10:09 PM
whole request: 20ms
10/02/16 3:13:12 PM
whole request: 12ms
10/02/16 3:14:11 PM
whole request: 13ms
10/02/16 3:15:34 PM
whole request: 62ms
10/02/16 3:15:54 PM
whole request: 52ms
10/02/16 3:16:28 PM
whole request: 82ms
10/02/16 3:17:55 PM
whole request: 11ms
10/02/16 3:17:57 PM
whole request: 112ms
10/02/16 3:17:57 PM
whole request: 17ms
10/02/16 3:17:59 PM
whole request: 22ms
10/02/16 3:18:01 PM
whole request: 14ms
10/02/16 3:18:03 PM
whole request: 118ms
10/02/16 3:18:06 PM
whole request: 85ms
10/02/16 3:18:10 PM
whole request: 11ms
10/02/16 3:18:32 PM
whole request: 19ms
10/02/16 3:21:05 PM
whole request: 19ms
10/02/16 3:21:22 PM
whole request: 60ms
10/02/16 3:22:35 PM
whole request: 79ms
10/02/16 3:24:37 PM
whole request: 11ms
10/02/16 3:24:56 PM
whole request: 15ms
10/02/16 3:26:49 PM
whole request: 19ms
10/02/16 3:27:10 PM
whole request: 18ms
10/02/16 3:27:13 PM
whole request: 11ms
10/02/16 3:27:14 PM
whole request: 53ms
10/02/16 3:27:33 PM
whole request: 31ms
10/02/16 3:31:58 PM
whole request: 74ms
10/02/16 3:32:02 PM
whole request: 79ms
10/02/16 3:32:18 PM
whole request: 17ms
10/02/16 3:32:25 PM
whole request: 12ms
10/02/16 3:32:26 PM
whole request: 10ms
10/02/16 3:32:28 PM
whole request: 105ms
10/02/16 3:33:22 PM
whole request: 11ms
10/02/16 3:35:14 PM
whole request: 58ms
10/02/16 3:35:21 PM
whole request: 13ms
10/02/16 3:35:27 PM
whole request: 106ms
10/02/16 3:35:31 PM
whole request: 82ms
10/02/16 3:35:32 PM
whole request: 11ms
10/02/16 3:35:46 PM
whole request: 110ms
10/02/16 3:35:54 PM
whole request: 14ms
10/02/16 3:36:07 PM
whole request: 17ms
10/02/16 3:36:09 PM
whole request: 16ms
10/02/16 3:36:12 PM
whole request: 14ms
10/02/16 3:36:20 PM
whole request: 111ms
10/02/16 3:36:47 PM
whole request: 53ms
10/02/16 3:37:25 PM
whole request: 11ms
10/02/16 3:37:25 PM
whole request: 12ms
10/02/16 3:37:32 PM
whole request: 12ms
10/02/16 3:38:29 PM
whole request: 72ms
10/02/16 3:39:56 PM
whole request: 11ms
10/02/16 3:40:27 PM
whole request: 18ms
10/02/16 3:40:29 PM
whole request: 16ms
10/02/16 3:40:42 PM
whole request: 20ms
10/02/16 3:40:59 PM
whole request: 23ms
10/02/16 3:42:23 PM
whole request: 15ms
10/02/16 3:42:41 PM
whole request: 52ms
10/02/16 3:43:12 PM
whole request: 12ms
10/02/16 3:49:23 PM
whole request: 57ms
10/02/16 3:52:23 PM
whole request: 61ms
10/02/16 3:53:08 PM
whole request: 15ms
10/02/16 3:55:26 PM
whole request: 83ms
10/02/16 3:55:35 PM
whole request: 24ms
10/02/16 3:56:51 PM
whole request: 28ms
10/02/16 3:57:29 PM
whole request: 87ms
10/02/16 3:57:51 PM
whole request: 13ms
10/02/16 4:07:25 PM
whole request: 71ms
10/02/16 4:08:07 PM
whole request: 18ms
10/02/16 4:10:14 PM
whole request: 54ms
10/02/16 4:11:11 PM
whole request: 56ms
10/02/16 4:11:18 PM
whole request: 79ms
10/02/16 4:12:19 PM
whole request: 18ms
10/02/16 4:16:25 PM
whole request: 10ms
10/02/16 4:16:25 PM
whole request: 16ms
10/02/16 4:17:07 PM
whole request: 11ms
10/02/16 4:17:12 PM
whole request: 12ms
10/02/16 4:17:28 PM
whole request: 10ms
10/02/16 4:20:42 PM
whole request: 55ms
10/02/16 4:21:58 PM
whole request: 52ms
10/02/16 4:22:01 PM
whole request: 62ms
10/02/16 4:22:03 PM
whole request: 70ms
10/02/16 4:29:09 PM
whole request: 95ms
10/02/16 4:34:50 PM
whole request: 14ms
10/02/16 4:35:05 PM
whole request: 17ms
10/02/16 4:35:34 PM
whole request: 12ms
10/02/16 4:36:05 PM
FIREBASE WARNING: Exception was thrown by user callback. TypeError: Cannot set property '__lastUpdated' of null
    at __vue_ssr_bundle__:163:27
    at c (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:240:58)
    at /home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:201:710
    at ec (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:52:165)
    at ac (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:31:216)
    at bc (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:30:1259)
    at Object.I (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:218:393)
    at /home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:181:3
    at Rh.h.Jd (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:186:104)
    at Fh.Jd (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:176:364)
    at wh.Jg (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:174:280) 
10/02/16 4:36:05 PM

/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:52
(d="0"+d),c+=d;return c.toLowerCase()}var zd=/^-?\d{1,10}$/;function td(a){return zd.test(a)&&(a=Number(a),-2147483648<=a&&2147483647>=a)?a:null}function ec(a){try{a()}catch(b){setTimeout(function(){R("Exception was thrown by user callback.",b.stack||"");throw b;},Math.floor(0))}}function S(a,b){if(t(a)){var c=Array.prototype.slice.call(arguments,1).slice();ec(function(){a.apply(null,c)})}};function Ad(a){var b={},c={},d={},e="";try{var f=a.split("."),b=Pb(id(f[0])||""),c=Pb(id(f[1])||""),e=f[2],d=c.d||{};delete c.d}catch(g){}return{ph:b,Dc:c,data:d,bh:e}}function Bd(a){a=Ad(a).Dc;return"object"===typeof a&&a.hasOwnProperty("iat")?z(a,"iat"):null}function Cd(a){a=Ad(a);var b=a.Dc;return!!a.bh&&!!b&&"object"===typeof b&&b.hasOwnProperty("iat")};function Dd(a){this.Y=a;this.g=a.n.g}function Ed(a,b,c,d){var e=[],f=[];Na(b,function(b){"child_changed"===b.type&&a.g.Ad(b.Le,b.Ma)&&f.push(new H("child_moved",b.Ma,b.Ya))
10/02/16 4:36:05 PM
TypeError: Cannot set property '__lastUpdated' of null
    at __vue_ssr_bundle__:163:27
    at c (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:240:58)
    at /home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:201:710
    at ec (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:52:165)
    at ac (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:31:216)
    at bc (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:30:1259)
    at Object.I (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:218:393)
    at /home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:181:3
    at Rh.h.Jd (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:186:104)
    at Fh.Jd (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:176:364)
    at wh.Jg (/home/nowuser/src/node_modules/d6381efceed459a22e732f3ad18c37e173c3332c/lib/firebase-node.js:174:280)
10/02/16 4:36:05 PM
Error Error: Command cross-env NODE_ENV=production node server ended with code 1
    at ChildProcess.<anonymous> (/usr/lib/node_modules/@zeit/ace/build/lib/run.js:1:599)
    at emitTwo (events.js:106:13)
    at ChildProcess.emit (events.js:191:7)
    at maybeClose (internal/child_process.js:877:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
10/02/16 4:36:05 PM
(node:59) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Command cross-env NODE_ENV=production node server ended with code 1

Client bundle size

Is it possible to get the bundle size down. This loads around 300KB into the browser. Surely that's not necessary?

Build Setup dont work

type npm run dev

let renderer
^^^

SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode


in server.js first line add "use strict" may work well

配置报了一个错

/Users/xiaowei/Documents/studios/vue-hackernews-2.0/server.js:30
let renderer
^^^

SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode

How to support sass

App.vue:

<style lang="scss">
  @import "sass/app.scss";
</style>

webpack.base.config.js:

const path = require('path')
const vueConfig = require('./vue-loader.config')

module.exports = {
  devtool: '#source-map',
  entry: {
    app: './src/client-entry.js',
    vendor: ['vue', 'vue-router', 'vuex', 'firebase', 'lru-cache', 'es6-promise']
  },
  output: {
    path: path.resolve(__dirname, '../dist'),
    publicPath: '/dist/',
    filename: 'client-bundle.js'
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue',
        options: vueConfig
      },
      {
        test: /\.js$/,
        loader: 'babel',
        exclude: /node_modules/
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        loader: 'url',
        options: {
          limit: 10000,
          name: '[name].[ext]?[hash]'
        }
      },
      {
        test: /\.scss$/,
        loader: 'style!css!sass',
        exclude: /node_modules/
      }
    ]
  },
  vue: {
    loaders: {
      scss: 'style!css!sass',
      exclude: /node_modules/
    }
  }
}

That has a error when build the demo:

throw new WebpackOptionsValidationError(webpackOptionsValidationErrors); 
WebpackOptionsValidationError: Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema.
configuration has an unknown property 'vue'. These properties are valid

改为koa2之后js静态资源加载不出来

遇到一个很奇怪的现象,我将项目改成了koa2,渲染首屏的时候,js静态资源路径是没错的,直接在网页打开js是能访问到的,但查看控制台,js静态资源请求结果返回404,js也没有正常加载到首屏页面,导致程序无法正常执行

补充:这个问题解决了,不过css没有正常插入页面,是stylus loader问题吗?

How to render the initial page html rather than just initial state?

Hi, the demo is so cool. I'm just very interested in how the ssr improve the initial page load experience.

The question I have is in this demo, it seems on the server, an INITIAL STATE will be generated and sent to client, and then the client js will render the page based on that state.

What I expect is the server will render all the html and send them to the client.

Could you explain how to do this in vue server rendering?

Thanks

HMR issue

Hi,

I'm pretty new to all the HMR + vuex stuff, that's why i'm playing with this demo.
However, I found this strange behaviour:
Let's take the App.vue component.
If I update the text in one of the router-link node, HMR works and the text node gets updated

<router-link to="/top">TopFoo</router-link>

If I add a HTML node right before, HMR works as expected, the node is prepended

<h1>Bar</h1>
<router-link to="/top">TopFoo</router-link>

But if I update the text within that new tag, HMR does not care at all

<h1>BarBaz</h1>
<router-link to="/top">TopFoo</router-link>

Is it intended?

How include <script> tag in template component ?

Hi guys,

I want to include scipts only in page Contact.vue

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"> </script> With mode developer it work, but in production it not working and removed <script>?

Please help me?
Tks!!

部署出错

本地运行没问题
npm run build编译之后
index.htmldist 目录
上传到了静态服务器,
界面出不来,
控制台显示错误
Uncaught TypeError: Cannot read property 'route' of undefined
线上预览
该怎么解决呢?

看了代码好像是 vuex-router-sync 的问题

How to replace Express with Feathers

Hi guys,

I just found Vue js, it's look pretty cool and I'm trying to make a starter project with it. I replaced express with Feathers but got i got this error

C:\Users\lam\Desktop\vue-feathers\src\app.js:91
    throw err
    ^
 TypeError: __WEBPACK_IMPORTED_MODULE_0_firebase___default.a is not a function
    at createServerSideAPI (__vue_ssr_bundle__:139:13)
    at Object.<anonymous> (__vue_ssr_bundle__:136:157)
    at __webpack_require__ (__vue_ssr_bundle__:21:30)
    at Object.<anonymous> (__vue_ssr_bundle__:331:63)
    at __webpack_require__ (__vue_ssr_bundle__:21:30)
    at Object.module.exports.exports.host (__vue_ssr_bundle__:217:65)
    at __webpack_require__ (__vue_ssr_bundle__:21:30)
    at Object.<anonymous> (__vue_ssr_bundle__:1409:63)
    at __webpack_require__ (__vue_ssr_bundle__:21:30)
    at __vue_ssr_bundle__:65:18

Can you guys help me to take a look at my repo and tell me what did I do wrong?
https://github.com/kieusonlam/vue-feathers-wepack
Thanks!

can not use with vue-resource 1.0.3, `npm run dev` crash...

Hi, guys!
I try to add vue-resource 1.0.3 to this sample. package.json.

"dependencies": {
    "es6-promise": "^3.2.1",
    "express": "^4.14.0",
    "firebase": "^2.4.2",
    "lru-cache": "^4.0.1",
    "serialize-javascript": "^1.3.0",
    "serve-favicon": "^2.3.0",
    "vue": "^2.0.1",
    "vue-router": "^2.0.1",
    "vue-resource": "^1.0.3",
    "vue-server-renderer": "^2.0.1",
    "vuex": "^2.0.0",
    "vuex-router-sync": "^3.0.0"
  }

app.js

import VueResource from 'vue-resource'
Vue.use(VueResource)

But, when it run, throws error strack...

D:\vue-hackernews-2.0\server.js:85
throw err
^

ReferenceError: document is not defined
at Object. (D:\vue-hackernews-2.0\node_modules.1.0.3@vue-resource\dist\vue-resource.common.js:641:18)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.require (module.js:483:17)
at require (internal/module.js:20:19)
at Object. (vue_ssr_bundle:2568:18)
at webpack_require (vue_ssr_bundle:21:30)

npm ERR! Windows_NT 6.1.7601
npm ERR! argv "D:\application\nodejs\node.exe" "D:\application\nodejs\node_modules\npm\bin\npm-cli.js" "run" "dev"
npm ERR! node v6.7.0
npm ERR! npm v3.10.3
npm ERR! code ELIFECYCLE
npm ERR! ehr-web@ dev: node server

How to debug the server bundle?

I'm playing with the demo for past three days and get a rough understanding of how the whole system run. I would say vue 2.0 is amazing. I want to upgrade my 1.x to 2.x ASAP.

The only issue that block me is for server bundle debugging.
I basically fail to debug the server bundle and have no idea how to setup breakpoint for the Vue app. I can break in the server.js anyway, but it's not that useful because I would like to debug my Vue app.
And debugger statement doesn't work either.

Please suggest. Currently I have to fallback to use console.log.

it sucks when upgrade vue 2.0 staff to the latest

After upgrade vue-server-renderer to RC 8, it complains

TypeError: __WEBPACK_IMPORTED_MODULE_0_firebase___default.a is not a constructor
    at createServerSideAPI (__vue_ssr_bundle__:138:13)
    at Object.<anonymous> (__vue_ssr_bundle__:135:157)
    at __webpack_require__ (__vue_ssr_bundle__:21:30)
    at Object.<anonymous> (__vue_ssr_bundle__:675:63)
    at __webpack_require__ (__vue_ssr_bundle__:21:30)
    at Object.module.exports.exports.default.name (__vue_ssr_bundle__:216:65)
    at __webpack_require__ (__vue_ssr_bundle__:21:30)
    at Object.<anonymous> (__vue_ssr_bundle__:1359:63)
    at __webpack_require__ (__vue_ssr_bundle__:21:30)
    at __vue_ssr_bundle__:65:18

Use Element UI ----> ReferenceError: window is not defined

@yyx990803

project base on hacknews

Use the eleme UI (element ui), add code on app.js

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css'
import App from './App.vue'

Vue.use(ElementUI)

new Vue({
  el: '#app',
  render: h => h(App)
})

but something wrong with it

ReferenceError: window is not defined

It's the server side rending cause it?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.