React制作官网、博客神器:Next.js
您好,我是沧沧凉凉,是一名前端开发者,目前在掘金、知乎以及个人博客上同步发表一些学习前端时遇到的趣事和知识,欢迎关注。
2022年了,我也要重新搭建我的个人主页,去年我是使用的create-react-app进行搭建,随着半年来对于React使用的逐步加深,我决定重置我的个人主页,这次我选择的是Nextjs重新进行搭建。
我们在做中后台应用的时候可以选择umi,在一个外包公司里面,制作一个官网也是一个非常常见的需求,然而使用umi完全可以满足我们制作官网的需求,但是这篇文章我想要讲一下制作官网、博客时,你可以选择的另一个React系框架:next.js。
在umi的官方文档中,直言不讳的说出了umi有非常多的功能都是参考next.js。
为什么不选择create-react-app,因为它默认不包含路由,不支持SSR,既然要做官网,我们就需要考虑到需要SSR的情况,虽然并不是所有的外包项目都会花钱去请人做SEO,但优先考虑到这种情况,后面如果真的要做SEO你也可以做到临危不乱。
路由
在pages目录下的文件会自动生成路由
动态路由
通过 getStaticProps 获取动态路由 [id].js 传递的参数
静态资源
public文件夹下的目录会直接被打包到根目录中,比如robots.txt、静态资源就应该放到该目录下。
加载第三方资源
使用Nextjs提供的标签代替原生标签:
image 替代 img
Head 替代 head
使用 相当于自定义HTML中 标签部分
Script 替代 script
- strategy:lazyOnload 告诉浏览器在空闲时间加载这个第三方脚本。
- onLoad:在该脚本加载完毕后,立即运行其中的代码。
Next内置了对 styled-jsx 的支持,同时也可以引入第三方库 styled-components 。
内置了对 .css .scss文件的支持 并且对 CSS Modules 进行了默认支持
全局样式
在Next中,只能够在pages/_app.js
中引入全局样式,不能在其它地方引入全局样式。
使用sass
Next默认支持sass,如果你想要使用你只需要安装一下sass
npm install sass
你还可以使用React中最火的css-in-js
方案styled-components
。
渲染markdown
https://nextjs.org/learn/basics/dynamic-routes/render-markdown
请求
Nextjs也是可以用来提供一些接口,因为我们无论是在做官网还是做博客,总有些数据是需要存储进数据库,然后展示在界面上,如果你这个项目有后端负责,那么这一部分完全不用管,如果这个项目就是你一个人开发,那么你可以使用Nextjs连接你的数据库。
接着只需要访问这个地址:
你可以看到返回一串JSON。
但是!如果你一旦使用了数据库,那么部署项目的时候就无法再使用静态包的形式,因为静态包是无法访问数据库的,只有部署成为Node项目,而且你需要保证数据库可以正常进行访问,那么这个时候你可能需要docker进行部署。
打包
打包
运行命令
npm run build
# 或者
yarn build
打包后的资源是无法放到Nginx这种静态服务器上面,只能通过npm run start
启动Node进行运行。
静态打包
静态打包时一个非常常见的需求,因为静态包占用的服务器资源远小于Node项目,但如果需要做SEO的话还是推荐直接进行打包,然后通过Node进行启动。
需要值得注意的是,静态打包是不会包含API路由,也就是说Next上的所有后端服务都会失效,不会被打包到最终的文件夹中。
nest build && nest export
运行结束后会发现多出了一个out文件夹,直接可以将该文件夹中的文件部署到Nginx这种静态服务器上。
部署
静态包
docker
docker将部署难度降低了一大截,现在很多后端项目都会通过docker进行部署,如果你的Next项目使用到了数据库,推荐使用docker进行部署,方便快捷,当然你也可以不通过docker进行部署,直接普通部署,但是项目中服务器的地址一定要填写正确。
最后
如果官网的需求不太复杂,你完全可以考虑使用Vue来进行搭建(如果你对React系不是太熟悉的话),Vue搭建官网不得不说也是一个非常好的选择。
Vue官方已经帮你整合了Vue-Router,同时Vue具有样式隔离,让你书写CSS样式变得非常方便,如果你需要使用less或者sass也可以直接进行引入,同时你如果需要SSR的话也可以选择Vue对应的Nuxt.js。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!