学习 next.js
nextjs 是一个server端渲染react组件的开源库 想要了解它的原因是
- 这周nextjs作者会作分享,提前温习,憋要浪费门票
- 服务器端渲染道听途说多,有必要实际了解下
- 多学总没有坏处
打怪升级
next专门做了个网站,提供轻松愉悦的学习路径。 章节内容安排的很下心,对react不熟悉的同学也很友好。
- 有详细的解释
- 有对应的demo项目
- 阶段性小测验(单项解答),答对了会计分
console on browser or server side ?
关键看是在哪里render, 这不是废话吗? 举个例子:
Fetch Batman Shows, index 页面可以跳转到post页面,通过点击链接到post页面的时候,是client端fetch数据渲染的组件; 如果直接访问对应的post页面的url,则是server端监听请求,渲染和返回页面。
next build
会生成 .next 目录,包含bundle文件和压缩的源码;
next start -p 8000
端口随便开,可以同时开启任意多的实例, 可以和其他的node server集成使用, 下面是express的例子:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30const express = require('express')
const next = require('next')
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
app.prepare()
.then(() => {
const server = express()
server.get('/p/:id', (req, res) => {
const actualPage = '/post'
const queryParams = { title: req.params.id }
app.render(req, res, actualPage, queryParams)
})
server.get('*', (req, res) => {
return handle(req, res)
})
server.listen(3000, (err) => {
if (err) throw err
console.log('> Ready on http://localhost:3000')
})
})
.catch((ex) => {
console.error(ex.stack)
process.exit(1)
})
now ?
next 推荐使用的部署工具,总是会映射到80端口,不管start脚本配置的是什么端口
导出静态文件
需要依赖nextjs 3.0以上版本, 需要配置next.config.js:1
2
3
4
5
6
7
8
9
10
11module.exports = {
exportPathMap: function () {
return {
'/': { page: '/' },
'/about': { page: '/about' },
'/p/hello-nextjs': {page: '/post', query: { title: "Hello Next.js" } },
'/p/learn-nextjs': { page: '/post', query: { title: "Learn Next.js is awesome" } },
'/p/deploy-nextjs': { page: '/post', query: { title: "Deploy apps with Zeit" } }
}
}
}
可以跑下面的命令1
2
3
4
5
6
7
8# next build
npm run build
# next export
npm run export
# default export to out
cd out
# 使用其他的server也可以
serve -p 8080
后续
JS 大会第一个就是讲的这个,主讲人现场演示中文名’寞晓墨’, 介绍了nextjs, 现场打码建工程,科普了ssr的很多特点和nextjs的牛逼之处。
用例子(Hello world, Hacker News, Chat Room)讲解了
在他做演示的时候我还留意到他使用的一个类似terminal的东西是叫hyper, 这个是基于web开发的一个terminal程序,回来后自己也安装了试用了下;
很尴尬。。网络不好,下了半天没下下来。等之后再写个使用说明吧