Next.js 上
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
zeit团队水平如何?看看这篇知乎上的答案
后来团队改名为Vercel。
简而言之,一个高中开始编程的,会做平面设计的复旦大学计算机专业毕业生,在微软工作过一年后,加入了zeit团队。
几乎每一个同事都有非常强大的背景.
Next.js核心团队四个人平均年龄20岁
按star数,zeit是Github组织的Top20
全员远程工作
Next.js不是一个前端框架也不是一个后端框架,而是一个全栈框架,即有了这个框架前后端的事情它都能做。比如
CSS-in-JS
页面预渲染+SSR(服务端渲染)
前后端同构(代码同时运行在两端)
Node.js版本在10.13以上
支持React和TypeScript
完全没有提供数据库相关功能,可自行搭配Sequelize或TypeORM
完全没有提供测试相关功能,可自行搭配Jest或Cypress
有一个叫做Blitz.js的框架在这些方向上努力
腾讯网手机版,和Teambition
Netflix Jobs, Twitch手机版,Hulu,TikTok抖音海外版,漫威官网,Material UI官网
国外用的比较多,国内用得少,那么国内学这个好找工作吗
国内一般招聘偏后端的前端,这样企业就可以省去招一个纯后端,国内市面上纯Node后端的需求和前端的比的话要少很多很多,可以去拉勾网上看。
Next.js切合了SSR,Serverless等技术热点。
支付宝的Umi是一个类Next.js框架,说明被认可
Next.js背后的团队方方非常欣赏。
饥人谷已经教了express和koa,完全可以自行掌握egg.js
进可往技术热点靠,退可回到egg.js
一节课搞清核心技术
我们对博客系统的需求足够了解,不需要再讨论
非常简单,易于学习
2023年更新:
用以下代码创建博客示例
我用的是Mac Mini,实际安装的时候和方方上课演示的略有出入
用浏览器打开控制台给出的网址,默认是http://localhost:3000
CRM学习法,将贯穿整个学习过程
把welcome to 改成Hello
创建pages/posts/first-post.js
如何访问这个页面?
路径为/posts/first-post
⚠️如果无法访问的话直接重启服务即可
新的版本是把页面放在pages的文件夹下,任何创建的页面都可以显示
比如pages/first-post.js, 在localhost:3000/first-post就可以显示。
如果要创建/authors/me
,应该放在pages/authors/me.js
下,并且一定要export,这样页面就可以显示出来。
Nextjs的理念借鉴了Rails的理念,约定大于配置,不需要配置,只需要约定,开发者自然意会
Link
快速导航
把<a href=xxx>点击跳转</a>
改成
<Link href=xxx><a>点击跳转</a></Link>
为什么要用Link?
页面不会刷新,用AJAX请求新页面内容
不会请求重复的HTML、CSS、JS
自动在页面插入新内容、删除旧内容
因为省了很多请求和解析过程,所以速度极快
Link快速导航借鉴了Rails Turbolinks,pjax等技术
同构代码的意思就是你的代码会同时在浏览器和NodeJs运行
在组件里写一句console.log("执行了")
你会发现Node控制台会输出这句话
你会发现Chrome控制台也会输出这句话
不是所有的代码都会运行,有些需要用户触发,比如onClick
不是所有的API都能用,比如window在Node里报错,因为window只在浏览器里支持,并不在Node里支持,运行在两端必须两边都支持。
npm init next-app 项目名
包住同构代码一份代码,两端运行(省了一份)全局配置
自定义
全局CSS
局部CSS
改各页面title
那是不是每一页都需要单独写一个title?
改各页面meta:viewport
那怎么改全局title和meta:viewport呢
export default function App是每个页面的根组件
页面切换时App不会销毁,App里面的组件会销毁
可用App保存全局状态
如果在_app里面添加Head和title,除非原始页面添加了Head和title,否则会使用_app
里的Head和title, 首页的head和title还是按照layout.js里的为准
更新完_app需要重启服务才能生效
创建_app.js之后需要重启yarn dev
因为切页面时App不会销毁
其他地方不能import global.css
其他地方只能写局部CSS
相对引用好烦,能改成import 'styles/global.css'吗
这种写法模仿Vue的单文件组件标签
在单独页面上使用style jsx标签不会产生冲突,就是因为单文件组件标签
这里推荐了一个Webstrom的插件叫Styled Components & Styled JSX,我看了下我的webstrom已经安装了
下面的代码还可以影响全局变量(尽量别用)
引入全局文件时路径产生错误怎么解决?
根目录创建一个文件名为jsconfig.json,在文件中放入以下代码
如何使用CSS Modules?
在styles
文件夹下创建一个以.module.css
结尾的文件
在文件中引入这个文件
使用的时候如下添加
默认支持styled-jsx和CSS Modules
一般来说,简单需求用前者,复杂需求用后者
styled-jsx不方便分离CSS和JS
CSS Modules用起来太麻烦
我更喜欢styled-components,后面有机会再改
把后缀.css改为.scss即可
next推荐放在public/里,方方不是很赞同
因为,放在public/里不支持改文件名
配置file-loader
或者直接用next-images
安装完成之后还是报错
TypeError: unsupported file type: undefined after update to v.11
解决方案参考这篇帖子:https://stackoverflow.com/questions/68008498/nextjs-typeerror-unsupported-file-type-undefined-after-update-to-v-11
就是禁用static image
最后成功的代码
一部分可以当作图片使用
icons/svg要当作SVG Symbols使用
目前没有插件,只能自己配置
自己要loader,然后配置next.config.js
或者看有没有人封装成next插件
创建项目
快速导航
同构代码
一份代码,两端运行
全局组件
pages/_app.js
自定义head
使用组件
全局CSS
在_app.js里import
局部CSS
<style jsx>
<style jsx global>
不推荐
xxx.module.css
SCSS
安装sass依赖即可
可以使WebStorm对xxx的提示更加智能
因为会自动匹配TypeScript类型和JS源码
好像也支持,可以自行尝试
目前还是皮毛,最重要、最难懂的请看下节课
就是做博客系统(饥人谷的教程略有删改)
在此
官方教程:
看文档章节
可以通过配置解决这个问题,官方文档:
下面这个代码我实际配置的时候不起作用,能print出来,但是还是不显示图片。
next-images