零基础可操作的 Node 入门学习指南
- 如何开始学习
Node.js
? Node.js
有哪些重要的内置模块需要重点学习?- 哪些源码可以推荐阅读?
- 有没有路线图(
Roadmap
)可以进行系统学习?
如何开始学习 Node.js?
根据公司的需求学习 Node.js
,在需求中进行学习,时间充分,成长快,事半功倍。
我们来看一看 Node.js
扮演的最重要的两个角色:
- 前端工具链
- Server
而对于前端,接触最多的便是基于 Node.js
的前端工具,比如 webpack
、rollup
、vite
、eslint
、prettier
、create-react-app
、create-vue
等。因此这里先说下前端工具链这部分。
而这部分,最容易在工作中获得需求,如构建一个脚手架,也容易作为自己的 KPI
/OKR
。通过此,可获得 Node.js
关于 文件系统、终端操作 一系列知识。
如果业务中不需要构建一个脚手架,那也有诸多的场景需要写一个脚本,其中涉及最多的也是文件系统。
比如,在详细了解并完成一个脚手架后,你至少可以了解一个问题?
如何判断文件是否存在?
再往下看,你会发现有很多关于文件系统的第三方包,他们是做什么的?
- mkdirp:什么是
mkdir -p
,你自己实现会如何实现,如何设计API
?(当然这个在Node.js 10+
已经原生实现,不过你仍然可以看看源码的实现) - fs-extra:你会发现很多脚手架都使用了
fs-extra
,它又比原生的fs
多了什么功能呢? - fs-events:为什么不使用原生的
fs.watch
监听文件变化呢,监听文件变化的底层操作系统原理又是什么呢? - graceful-fs:它为什么比原生的
fs
更加友好(graceful
)
继续深入,你会发现,一个东西叫 Glob
,一个叫 Braces
,它们又是啥?最后你发现,原来它们和语言无关,在终端就可以直接使用。
Glob
ls -lah *.js
Braces
- Set:
{x,y,z}
- Sequence:
{1..10}
- Step:
{1..10..2}
Node.js 有哪些重要的内置模块需要重点学习?
好吧,假设这个大前提是,我想要使用 Node.js
作为服务器端来使用,那我应该重点学习哪些重要模块?
那最重要的一个就是:
http
非常重要但是不那么紧急的有:
stream
buffer
net
这几个模块十分重要,但是学习起来非常枯燥。可参照我的示例代码 node-native 进行学习。
最终也可以思考一个问题?
我需要考虑多少边界条件才能正确读取到 Request Body
呢? 可以参考 raw-body
哪些源码可以推荐阅读?
- lru-cache:
LRU Cache
,前端及服务端框架中的常用依赖。 - tsdx:零配置的
npm
库开发利器,与CRA
相似,不过它主要面向库开发者而非业务开发者,了解它是如何提供零配置功能,看懂默认配置做了那些优化,并了解它的所有工具链(prettier
、eslint
、size
、bundleanalyzer
、rollup
、typescript
、storybook
)。 - create-react-app:
React
最广泛的脚手架,读懂三点。一,如何生成脚手架;二,如何实现eject
;三,了解CRA
的所有重要依赖,读懂默认webpack
配置。 - axios:请求库,了解它是如何封装源码且如何实现拦截器的。
- koa:现代
Node.js
框架,了解中间件机制和async/await
的应用。 - body-parser:
Express
甚至是大部分服务端框架所依赖的用以解析body
的库 - next:全栈
React
框架,了解SSR
、SSG
等现代前端技术。 - ws:了解
WebSocket
是如何构造Frame
并发送数据的(在此之前可阅读node/http
源码) - apollo-server:
GraphQL
框架,值得一看 - node:最难的放到最后边
还有一些细节可以实现下:
- Native HTTP Server
- Native HTTP Client
- Trie Router
- Mustable
- Stream Pipeline (
Node.js
):https://github.com/mafintosh/pump
有没有线路图可以推荐下
目前关于 Node.js
的学习路线图还不太有,我粗略总结一下,过几天做一个路线图出来:
- 了解
Node.js
可以做什么 - 学习
Node.js
的http
模块,并了解一些简单的HTTP Header
及状态码 - 学习
Node.js
的stream
并且了解如何最简单形式的读取Request Body
- 学习
Node.js
的一个框架,比如Express
、Koa
、Fastify
、Nest
- 学习
Node.js
框架如何写中间件,并了解其Context
- 学习
Node.js
的路由,了解两种,一种基于正则,一种基于前缀树 - 使用
Docker
在本地搭建一个PostgreSQL
/Redis
,学习简单的数据库和Redis
- 使用
Sequelize
了解如何操作数据库 - 使用
Node.js
写一个真正但简单的服务,比如成语接龙 - 日志设计,接入数据
- 部署
- 异常与报警设计
- 性能分析与调试
学习资源推荐
学习结束后可以根据面试进行系统训练:
- ElemeFE/node-interview:关于
Node.js
的面试合集 - goldbergyoni/nodebestpractices:✅ The Node.js best practices list (February 2022)
总结
学习 Node.js
不是一蹴而就的过程,需要结合实际项目需求,从简单的脚本编写开始,逐步深入到服务器开发、性能优化等高级主题。记住,实践是最好的老师,多写代码,多读源码,多思考问题的本质,你就能在 Node.js
的道路上越走越远。